将Express.js端点与promises一起使用

时间:2016-01-27 17:12:36

标签: javascript node.js express

我正在尝试使用快递承诺,但我无法使其发挥作用。 当我取消注释(1)时,我可以将响应设置为200,但无论我尝试将其设置为承诺中的响应(2,3,4)它始终返回401

我可以在console.logdata then,因此承诺肯定会解决,但我相信401已发送,因为函数不会等待承诺得到解决是吗?

我做错了什么以及如何设定承诺的回应?

提前致谢!

app.get('/get_data', function (req, res) {

  //res.json(200, {}); return; --> (1) gives expected 200 

  tree.getData(req.param('ids'))
     .then(function (data) { 
         // console.log('data'); --> (2) logs requested array of data
         //return res.json(200,{}); --> (3) gives 401
         return res.send(data); // --> (4) gives 401
     }).fail(function (err) {
         // never goes here
         console.log(err);
         return res.json(550, err);
     });
});

1 个答案:

答案 0 :(得分:1)

您需要在tree.getData之前添加一个返回以返回promise及其结果。 A +承诺有catch()而非fail()

在Express中设置状态代码时,您需要使用res.status().send()而不是res.send(status, data) Express res.send() Docs

app.get('/get_data', function (req, res) {

  return tree.getData(req.param('ids'))
     .then(function (data) { 
         return res.status(200).send(data)
     }).catch(function (err) {
         // never goes here
         console.log(err);
         return res.status(550).json(err);
     });
});