Buscar..


Observaciones

En mangosta, Middlewares también se llama como ganchos de pre y post .

Hay dos tipos de middleware

Ambos de estos middleware soportan ganchos pre y post .

  1. Documento middleware

    Es compatible con las funciones de documento de init , validate , save y remove

  1. Middleware de consulta

    Su soporte para las funciones de consulta count , find , findOne , findOneAndRemove , findOneAndUpdate , insertMany y update .


Ganchos pre y post

Hay dos tipos de ganchos Pre

  1. de serie

    Como su nombre lo indica, se ejecuta en orden en serie i..e uno tras otro

  1. paralela

    El middleware paralelo ofrece un control de flujo más preciso y el hooked method no se ejecuta hasta que el middleware paralelo llama a done .

Post Middleware se ejecuta después de que se haya completado el hooked method y todo su pre middleware.


Los métodos enganchados son las funciones soportadas por el middleware de documentos. init, validate, save, remove

Middleware para hash contraseña de usuario antes de guardarlo

Este es un ejemplo de Serial Document Middleware

En este ejemplo, escribiremos un middleware que convertirá la contraseña de texto sin formato en una contraseña con hash antes de guardarla en la base de datos.

Este middleware se activará automáticamente cuando se cree un nuevo usuario o se actualicen los detalles de los usuarios existentes.


User.js : User.js

// lets import mongoose first
import mongoose from 'mongoose'

// lets create a schema for the user model
const UserSchema = mongoose.Schema(
  {
    name: String,
    email: { type: String, lowercase: true, requird: true },
    password: String,
  },
);


/**
 * This is the middleware, It will be called before saving any record
 */
UserSchema.pre('save', function(next) {

  // check if password is present and is modified.
  if ( this.password && this.isModified('password') ) {

    // call your hashPassword method here which will return the hashed password.
    this.password = hashPassword(this.password);

  }

  // everything is done, so let's call the next callback.
  next();

});


// lets export it, so we can import it in other files.
export default mongoose.model( 'User', UserSchema );

Ahora, cada vez que guardamos un usuario, este middleware verificará si la contraseña está configurada y modificada (esto es así, si la contraseña no se modifica), no tenemos hash.


App.js : App.js

import express from 'express';
import mongoose from 'mongoose';

// lets import our User Model
import User from './User';

// connect to MongoDB
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://127.0.0.1:27017/database');


let app = express();
/* ... express middlewares here .... */


app.post( '/', (req, res) => {

  /*
    req.body = {
      name: 'John Doe',
      email: '[email protected]',
      password: '!trump'
    }
   */

  // validate the POST data

  let newUser = new User({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password,
  });

  newUser.save( ( error, record ) => {
    if (error) {
      res.json({
        message: 'error',
        description: 'some error occoured while saving the user in database.'
      });
    } else {
      res.json({
        message: 'success',
        description: 'user details successfully saved.',
        user: record
      });
    }
  });

});



let server = app.listen( 3000, () => {
    console.log(`Server running at http://localhost:3000` );
  }
);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow