javascript - 使用带有 Promise 的 Express.js 端点

标签 javascript node.js express

我正在尝试使用带有 promise 的express,但无法使其工作。 当我取消注释 (1) 时,我可以将响应设置为 200,但无论我尝试在 promise (2,3,4) 中设置响应,它总是返回 401

我可以在 thenconsole.log data 所以 promise 肯定会解决,但我相信 401 是发送是因为函数不会等待 Promise 得到解决,对吗?

我做错了什么以及如何设置 promise 的响应?

提前致谢!

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

最佳答案

您需要在tree.getData之前添加一个return来返回promise及其结果。 A+ Promise 具有 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);
     });
});

关于javascript - 使用带有 Promise 的 Express.js 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35043769/

相关文章:

javascript - 文本区域工具栏?

javascript - 关于 JSLint,它对 for 循环的厌恶,以及尾调用优化

javascript - 如何使用正则表达式来验证中文输入?

node.js - Node 服务器未写入文件?

javascript - 如何使用 Stripe 和 Node.js 创建费用

node.js - 使用 Sequelize 仅在一个文件中进行身份验证

javascript - 将 id 添加到可见元素的子元素

html - 显示来自 s3 的图像

node.js - nodejs中的isNaN函数

javascript - expressJS 路由器规划 - 如何设置有效的路由器