comment utiliser Promise avec express dans node.js?

J’utilise Promise avec 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); }); 

Lorsque je me connecte à errorsArray , il est vide et je ne sais pas pourquoi. Je suis nouveau dans node.js. Merci d’avance.

Essayez ce qui suit et lisez ensuite le document suivant https://www.promisejs.org/ pour comprendre le fonctionnement des promesses.

 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(); }); }); 

Vous pouvez également avoir d’autres erreurs (ou des choses qui ne devraient pas être faites de cette façon). Je ne vous montre que l’utilisation de base d’une promesse.

 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); }); }); 

vous pouvez écrire un code propre comme celui-ci. Promise est une variable globale disponible dont vous n’avez pas besoin.

Avant d’utiliser des promesses, vous devez comprendre la nature des fonctions asynchrones et des rappels. Dans cet exemple, lorsque Express appelle votre fonction ( req , res ), l’object req provient d’une requête HTTP et vous devez restituer des données via le paramètre res comme ceci:

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