使用Promise处理Node.js + Express中的错误

克里斯

使用Node.js + Express(4)+猫鼬(使用承诺而不是回调),我无法弄清如何整理错误处理。

我得到的(相当简化)是:

app.get('/xxx/:id', function(request, response) {
    Xxx.findById(request.params.id).exec()
        .then(function(xxx) {
            if (xxx == null) throw Error('Xxx '+request.params.id+' not found');
            response.send('Found xxx '+request.params.id);
        })
        .then(null, function(error) { // promise rejected
            switch (error.name) {
                case 'Error':
                    response.status(404).send(error.message); // xxx not found
                    break;
                case 'CastError':
                    response.status(404).send('Invalid id '+request.params.id);
                    break;
                default:
                    response.status(500).send(error.message);
                    break;
            }
        });
});

在这里,在“承诺被拒绝”部分的切换中,这Error是我为自己找不到的潜在有效ID抛出的错误,CastErrorMongoose为无效ID抛出的Cast to ObjectId失败,而500错误可以实例被错误地触发throw Error()throw Err()(导致ReferenceError:未定义Err)。

但是像这样,我的每条路线都有一个很大的笨拙开关来处理不同的错误。

如何集中处理错误?可以将开关以某种方式隐藏在某些中间件中吗?

(我确实希望我可以throw error;在“承诺被拒绝”栏中重新使用,但我无法使其正常工作)。

乔丹尼亚斯

我将创建中间件来处理错误。使用next()了404。以及next(err)其他错误。

app.get('/xxx/:id', function(req, res, next) {
  Xxx.findById(req.params.id).exec()
    .then(function(xxx) {
      if (xxx == null) return next(); // Not found
      return res.send('Found xxx '+request.params.id);
    })
    .then(null, function(err) {
      return next(err);
    });
});

404处理程序

app.use(function(req, res) {
  return res.send('404');
});

错误处理程序

app.use(function(err, req, res) {
  switch (err.name) {
    case 'CastError':
      res.status(400); // Bad Request
      return res.send('400');
    default:
      res.status(500); // Internal server error
      return res.send('500');
  }
});

您可以通过发送json响应来进一步改善此情况,例如:

return res.json({
  status: 'OK',
  result: someResult
});

或者

return res.json({
  status: 'error',
  message: err
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Promise正确处理express.js中的错误(字符串或对象)

来自分类Dev

使用Promise处理Node.js中的MySQL返回值

来自分类Dev

Node.js Express处理错误功能

来自分类Dev

Express js-中间件中的错误处理

来自分类Dev

express.js中Ajax请求的错误处理

来自分类Dev

Express js-中间件中的错误处理

来自分类Dev

如何处理Express Node.js中的主体解析器错误

来自分类Dev

在Express / Node.js中处理503错误,尤其是在TryCatch情况下

来自分类Dev

如何在node.js中将Express与Promise结合使用?

来自分类Dev

用Express在Node JS中进行简单的错误处理?

来自分类Dev

处理Node js中的多个错误

来自分类Dev

node.js 中未处理的错误

来自分类Dev

Node.js / Express:错误:无法在视图目录中查找视图“错误”

来自分类Dev

Express.js Node.js中的猫鼬查询数据,得到错误的结果

来自分类Dev

在服务/控制器层中处理Express.js中的错误

来自分类Dev

express.js中嵌套异步函数中的错误处理

来自分类Dev

使用Bluebird在Promise中包装Node.js回调

来自分类Dev

在while(JavaScript / Node.js)中如何使用Promise?

来自分类Dev

使用Promise重写Node.js中的Redis调用

来自分类Dev

Promise / bluebird.js中的错误处理

来自分类Dev

Promise / bluebird.js中的错误处理

来自分类Dev

在node.js / express中处理<select>表单参数

来自分类Dev

在node.js / express中处理<select>表单参数

来自分类常见问题

使用node.js流进行错误处理

来自分类Dev

使用 socket.emit 处理 Node.js 错误

来自分类Dev

在 Node.js 中使用 try..catch 处理错误

来自分类Dev

删除CRUD RESTful API(Node.js,Express,Mongodb)中的错误

来自分类Dev

node.js/express 应用程序中的错误:发送后无法设置标头

来自分类Dev

Node.js和Express错误

Related 相关文章

  1. 1

    如何使用Promise正确处理express.js中的错误(字符串或对象)

  2. 2

    使用Promise处理Node.js中的MySQL返回值

  3. 3

    Node.js Express处理错误功能

  4. 4

    Express js-中间件中的错误处理

  5. 5

    express.js中Ajax请求的错误处理

  6. 6

    Express js-中间件中的错误处理

  7. 7

    如何处理Express Node.js中的主体解析器错误

  8. 8

    在Express / Node.js中处理503错误,尤其是在TryCatch情况下

  9. 9

    如何在node.js中将Express与Promise结合使用?

  10. 10

    用Express在Node JS中进行简单的错误处理?

  11. 11

    处理Node js中的多个错误

  12. 12

    node.js 中未处理的错误

  13. 13

    Node.js / Express:错误:无法在视图目录中查找视图“错误”

  14. 14

    Express.js Node.js中的猫鼬查询数据,得到错误的结果

  15. 15

    在服务/控制器层中处理Express.js中的错误

  16. 16

    express.js中嵌套异步函数中的错误处理

  17. 17

    使用Bluebird在Promise中包装Node.js回调

  18. 18

    在while(JavaScript / Node.js)中如何使用Promise?

  19. 19

    使用Promise重写Node.js中的Redis调用

  20. 20

    Promise / bluebird.js中的错误处理

  21. 21

    Promise / bluebird.js中的错误处理

  22. 22

    在node.js / express中处理<select>表单参数

  23. 23

    在node.js / express中处理<select>表单参数

  24. 24

    使用node.js流进行错误处理

  25. 25

    使用 socket.emit 处理 Node.js 错误

  26. 26

    在 Node.js 中使用 try..catch 处理错误

  27. 27

    删除CRUD RESTful API(Node.js,Express,Mongodb)中的错误

  28. 28

    node.js/express 应用程序中的错误:发送后无法设置标头

  29. 29

    Node.js和Express错误

热门标签

归档