node.js - Express 中间件 - 添加 promise 拒绝处理程序

标签 node.js express express-4

我有以下简化的中间件功能:

router.put('/', function (req, res, next) {

  const data = req.body;
  const q = req.parsedFilterParam;
  const opts = req.parsedQueryOpts;

  ResponseCtrl.update(q, data, opts)
  .then(stdPromiseResp(res))
  .catch(next);
});

我想为中间件添加一些捕获错误的功能,只是为了节省一些代码,如下所示:

router.put('/', function (req, res, next) {

  const data = req.body;
  const q = req.parsedFilterParam;
  const opts = req.parsedQueryOpts;

  return ResponseCtrl.update(q, data, opts)
  .then(stdPromiseResp(res));

});

所以我们现在在中间件函数中返回 Promise,并且我们可以放弃 catch block 。

所以在内部,现在可能看起来像这样:

nextMiddlewareFn(req,res,next);

只是想将其更改为:

const v = nextMiddlewareFn(req,res,next);
if(v && typeof v.catch === 'function'){
   v.catch(next);
});

有人知道如何使用 Express 做到这一点吗?

最佳答案

使用express promise router .

var router = new ExpressPromiseRouter();

router.get('/foo', function(req, res) {
  return somethingPromisey();
});
// or...
router.get('/bar', async function(req, res) {
  await somethingPromisey();
});

app.use(router);

PS:There's no need to be afraid of async/await on performance grounds.与带有 Promise 的常规函数​​没有明显区别。

关于node.js - Express 中间件 - 添加 promise 拒绝处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415030/

相关文章:

javascript - Sequelize 如何比较查询中日期的年份

node.js - 无法使用nodejs在数据库的所有文档中插入子文档

javascript - 试图理解为什么调用末尾有额外的括号

node.js - 卡在中间件中的 console.log(JSON.stringify(req)) 上

node.js - 异步函数抛出错误 - 但调用它的快速端点 - 看不到它

javascript - 在 Console.log 和 api 响应中获取未定义的外键

node.js - NodeJS : Confusion about async "readdir" and "stat"

javascript - REST : Return complex nested data vs. 多次调用

javascript - 在单个快速处理程序中处理 multipart/formdata、application/json 和 text/plain?

javascript - 数据库不更新用户密码重置