Í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
    4. Peticiones GET y POST
  8. Mysql
    1. Express con mysql - ejemplo básico
    2. Inserción con MySQL en nodeJS
    3. Mostrar errores Mysql
    4. Con parámetros
    5. Borrar
    6. Actualizar
    7. Ejercicio CRUD
    8. Consulta
    9. 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. Subida de una imagen al servidor
  16. Middleware
  17. express sin express-generator
  18. Servidor web sin express
  19. Publicar un plugin en npm
  20. 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 mailPreguntame lo que quieras!
Pablo Monteserín
contacta conmigoPablo Monteserín

El servicio de resolución de dudas técnicas es sólo para los usuarios premium. Si tienes cualquier otra duda, usa el formulario de contacto. ¡Gracias!