mongoose
Mangosta Middleware
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 .
Documento middleware
Es compatible con las funciones de documento de
init,validate,saveyremove
Middleware de consulta
Su soporte para las funciones de consulta
count,find,findOne,findOneAndRemove,findOneAndUpdate,insertManyyupdate.
Ganchos pre y post
Hay dos tipos de ganchos Pre
de serie
Como su nombre lo indica, se ejecuta en orden en serie i..e uno tras otro
paralela
El middleware paralelo ofrece un control de flujo más preciso y el
hooked methodno se ejecuta hasta que el middleware paralelo llama adone.
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` );
}
);