该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抛出这样的错误时,为什么服务器时间会增加? 我想知道我的方法是否有错误或是否还有其他更好的方法。 谢谢你。
答案 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);
}
});
});