2016-01-27 25 views
10

Sto usando Promise con Express.come usare Promise con express in node.js?

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 accedo errorsArray, è vuota e non so perché. Sono nuovo in node.js. Grazie in anticipo.

+4

'username = username();' non è sicuramente quello che vuoi. – Bergi

+0

Sì, stai riaccordando una promessa. Dovremo fare qualcosa come 'username.then (function (data) {console.log (...)});' – anolsi

+0

puoi riscriverlo per favore? Grazie in anticipo – hu7sy

risposta

11

Provare quanto segue e dopo si prega 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(); 
    }); 
}); 

Si possono avere anche altri errori (o cose che non dovrebbero essere fatte in questo modo). Ti sto solo mostrando l'uso di base di una promessa.

+0

node8 need require ('promise')? – stackdave

+3

No, @stackdave, non come dal nodo v0.12 (!) - si veda [node.green] (http://node.green/#ES2015-built-ins-Promise). –

+0

@anolsi ma come si scrivono i dati in res dopo che la promessa è stata risolta? Express sta restituendo res non appena la funzione viene chiusa. –

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

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