come usare Promise con express in node.js?

Sto usando Promise con Express.

router.post('/Registration', function(req, res) { var Promise = require('promise'); var errorsArr = []; function username() { console.log("agyaaa"); return new Promise(function(resolve, reject) { User.findOne({ username: req.body.username }, function(err, user) { if(err) { reject(err) } else { console.log("yaha b agyaaa"); errorsArr.push({ msg: "Username already been taken." }); resolve(errorsArr); } }); }); } var username = username(); console.log(errorsArr); }); 

Quando registro errorsArray , è vuoto e non so perché. Sono nuovo in node.js. Grazie in anticipo.

Prova quanto segue, e dopo ti preghiamo di leggere il seguente documento https://www.promisejs.org/ per capire come funzionano le promesse.

 var Promise = require('promise'); router.post('/Registration',function(req,res,next) { function username() { console.log("agyaaa"); return new Promise(function(resolve,reject) { User.findOne({"username":req.body.username}, function(err,user) { if (err) { reject(err) } else { console.log("yaha b agyaaa"); var errorsArr = []; errorsArr.push({"msg":"Username already been taken."}); resolve(errorsArr); } }); }); } username().then(function(data) { console.log(data); next(); }); }); 

Puoi anche avere altri errori (o cose che non dovrebbero essere fatte in quel modo). Ti sto solo mostrando l’uso di base di una promise.

 router.post('/Registration', function(req, res) { return User .findOne({ username: req.body.username }) .then((user) => { if (user) { return console.log({ msg:"Username already been taken" }); } return console.log({ msg: "Username available." }); }) .catch((err)=>{ return console.error(err); }); }); 

puoi scrivere un codice pulito come questo. Promise è una variabile globale disponibile non è necessario richiederlo.

Prima di utilizzare le promesse, è necessario comprendere la natura delle funzioni asincrone e delle richiamate. In questo esempio quando express chiama la tua funzione ( req , res ) l’object req proviene da una richiesta HTTP, e devi restituire alcuni dati attraverso il parametro res come questo:

 errorsArr.push({"msg":"Username already been taken."}) res.json({errors: errorsArr})