NodeJS和ExpressJS如何引发错误?

时间:2019-04-15 08:59:45

标签: node.js mongodb express

该Web应用程序使用express作为服务器语言,使用Nodejs作为语言,使用MongoDB作为数据库,使用mongoose作为包装器。 Express在端口3000上运行服务器,我正在尝试为集合实施基本的CRUD。 我使用Newrelic生成图形,并且看到快速抛出错误时响应时间服务器正在上升 例如:

User.findOne({ $or: [{ email: { $regex: new RegExp(email, 'i') } }, { userLogin: { $regex: new RegExp(userLogin, 'i') } }] }, 'id').exec()
    .then(results => {
        if (results) { throw new APIError('email_taken') } 
        else { return results }
  }).then(result => {
      res.status(201).success(result)
    }, error => {
      res.error(error)
    })

我真的不明白,当ExpressJS抛出这样的错误时,为什么服务器时间会增加? 我想知道我的方法是否有错误或是否还有其他更好的方法。 谢谢你。

1 个答案:

答案 0 :(得分:0)

如果您浏览error handling上的ExpressJS文档,则说明

  

在路由处理程序和   中间件不需要额外的工作。如果同步代码抛出错误,   然后Express会捕获并处理它。

但是

  

对于由路由调用的异步函数返回的错误   处理程序和中间件,您必须将它们传递给next()函数,   Express将在哪里捕获并处理它们。

由于数据库操作本质上是异步的,因此应始终将错误传递给next()以便正确处理

示例

app.get("/", function (req, res, next) {
  fs.readFile("/file-does-not-exist", function (err, data) {
    if (err) {
      next(err); // Pass errors to Express.
    }
    else {
      res.send(data);
    }
  });
});