web-dev-qa-db-fra.com

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("1");
    return new Promise(function(resolve, reject) {
      User.findOne({ username: req.body.username }, function(err, user) {
        if(err) {
          reject(err)
        } else {
          console.log("2");
          errorsArr.Push({ msg: "Username already been taken." });
          resolve(errorsArr);
        }
      });
    });
  }
  var username = username();
  console.log(errorsArr);
});

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

14
hu7sy

Essayez ce qui suit, et après, veuillez lire 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.

16
anolsi
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.

0