NodeJS template

Contactar con el profesor

A continuación te explico como usar una plantilla hecha con NodeJS para tus proyectos. Esta plantilla tiene las siguientes características:

  • Programación funcional.
  • Enfocada para hacer API Rest.
  • Soporte para web sockets.
  • Soporte para swagger.

Para instalarla:

npx degit monteserin/nodejs-template

API REST Controller

Sus peticiones se gestionan en ./src/controllers/api/users/index.js

Ejemplo de petición:

router.delete("/:id", restrictedAccess,asyncHandler( async (req, res) => {
  const { params: { id } } = req;
  await UsersModel.deleteUser(id);
  res.send(`User id: ${id} deleted`);
}));

asyncHandler

Se encarga de evitar que el servidor se caiga cuando se produzca una excepción (en nuestro caso usamos Heroku, aunque en local usemos nodemon y no se caerá).

Por otra parte, también nos evita tener que repetir el código de manejo de errores (try, catch) para cada petición. Sólo hará falta escribir dicho código dentro del asyncHandler.

El siguiente código:

app.get("/", asyncHandler(async (req, res) => {
    res.seeeend("va bien la cosaa"); 
}));

daría un error que sería gestionado aquí:

./src/middlewares/error-handler.js

export const asyncHandler = controller => (req, res, next) => Promise
  .resolve(controller(req, res, next))
  .catch((err) => {
    console.error('Request error:' + err.toString());
    if (err) return res.sendStatus(500).send();
});

swagger

Podemos acceder a la documentación de la api REST (Swagger) mediante el path /docs.

Model

Sus métodos se gestionan en ./src/models/users/index.js.

export const deleteUser = id => UserSchema.destroy({ where: { id }});

Y su estructura en ./src/models/users/schema.js

import { db } from '../../database';
const { DataTypes } = require('sequelize');

const User = db.define('user', {
	password: DataTypes.STRING,
	username: DataTypes.STRING,
});

export default User;

Regenerar la base de datos

Muchas veces, como consecuencia de haber modificado nuestro modelo de datos, necesitaremos borrar la base de datos para que las tablas vuelvan a generarse. Esto nunca debe hacerse en producción. Para forzar el borrado de las tablas al arrancar la aplicación, usaremos {force: true}

./src/database/index.js

export default async (onConnect) => {
	try {
        await db.authenticate();
        db.sync({ force: true});
        ...

Conexión a la base de datos:

Está en ./src/config/database.js:

export default {
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'amor',
    connectionLimit : 10,
};

← Sockets
Swagger →

Aviso Legal | Política de privacidad