Índice del curso de node JS

  1. ¿Qué es NodeJS?
  2. Instalación de NodeJS
  3. Hola Mundo
  4. package.json
  5. Módulos
  6. Módulo para actualizar los cambios
  7. express
    1. Generación de un proyecto express
    2. Rutas con Express
    3. Enviar un array a la vista
  8. Mysql
    1. Express con mysql - ejemplo básico
    2. Mostrar errores Mysql
    3. Con parámetros
    4. Borrar
    5. Actualizar
    6. Ejercicio CRUD
    7. Consulta
    8. Sequelize
  9. Web Sockets con Express
  10. Imprimir los logs en un fichero de texto
  11. Handlebars - hbs
  12. Variables de sesión
  13. CORS
  14. JWT (JSON Web Tokens) usando express
  15. Middleware
  16. express sin express-generator
  17. Servidor web sin express
  18. Publicar un plugin en npm
  19. Chokidar

Creando un middleware

Un middleware es un código que se ejecuta antes de procesar la petición. En nuestro caso, vamos a comprobar que el usuario está logueado en cada petición.

Habitualmente se definen en el fichero App.js mediante el método use.

Controlar el acceso de las peticiones a los recursos del servidor mediante un token

El siguiente middleware se ejecutará antes de cada llamada al localsRouter.

app.jsconst privateAccess = require('./middlewares/private-access');

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, access-token');

    //Las peticiones de tipo OPTIONS son mandadas automáticamente por el navegador para comprobas cuales son las cabeceras que van a enviarse, por tanto si la petición es de tipo 'OPTIONS', no ejecutaremos más middelwares porque sólo queríamos comprobar las cabeceras. Si no es de tipo OPTIONS, continuamos con el siguiente MIDDLEWARE
    if(req.method === 'OPTIONS') {
        res.send('Success');
    } else {
        next();
    }
});

app.use('/locals', privateAccess, localsRouter);
middlewares/private-access.jsconst verifyToken = require('../servicios/jwt.js');

const getHeader = (req, header) => req.headers[header];

function privateAccess(req, res, next) {
    const token = getHeader(req, 'access-token');

    if (!token) {
        return res.sendStatus(400); // Bad request
    }
    return verifyToken(token, (err, decoded) => {
        if (err) {
            res.sendStatus(403) // forbiden
        }
        // Save user id to request for further usage
        req.userId = decoded.id;
        return next();
    });
}

module.exports = privateAccess;// CommonJs
Enviar datosconst url = 'http://pablomonteserin.com:17041/locals',
    params = {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'access-token': 'elToken...'
        },
    };

fetch(url, params)
.then(res => res.json())
.then((data) => {
    if (data === -1) {
        alert('error en el login');
    } else {
        this.setState({ locals: data });
    }
});
icono de mandar un mail¡Contacta conmigo!
Pablo Monteserín
contacta conmigoPablo Monteserín

Para dudas técnicas sobre los ejercicios de mis cursos es necesario estar suscrito.