什么是正确的方式来创build快速请求返回的错误消息?
我有一个函数称为a
接受callback,如果有错误,会调用一个错误。
a
在快速路由请求中被调用。 如果有错误,错误应该是请求的响应。
function a(cb) { cb(new Error('Some error message')) } app.get('/', function (req, res) { a(function (error) { if (error) { res.json(error, 400) } res.send('No error') }) })
我已经查看了Express的代码,看来res.json
会将我的error
res.json
。 但是,这个结果是一个空string:
> var e = new Error('Some error message') undefined > JSON.stringify(e) '{}' > e.message 'Some error message'
有一些方法可以让我的路线在这里返回错误信息,比如在我的路线中将错误对象转换为toString
。 不过,我想知道在Node API中格式化错误消息的最佳做法是什么,以及这是否会改变这里的内容。 我应该以不同的方式格式化错误消息,还是应该处理路由中的Error
对象,例如:
res.json({ error: error.message }, 400)
Express路由可以使用next
的第三个参数,通过调用next()
来跳过当前路由,或者通过调用next(err)
来传递错误。
尝试使用:
app.get('/', function (req, res, next) { a(function (error) { if (error) { next(error); } else { res.send('No error') } }); });
有关更多信息,请查看http://expressjs.com/api.html#app.param
要添加@ steveukx的答案,你可以用express来指定一个error handling程序,方法是.use
一个arity为4的函数。
app.use(function(err, req, res, next){ res.json(500, { error: err.message }); });
next(err)
会被调用。 看文档 。
我现在不是什么你的反应看起来像什么时候没有发生错误,但这是我通常如何处理JSON响应:
function (err, data) { if (err) { res.json({ success: false, error: err.message }, 400); } else { res.json({ success: true, data: data }); } }
试着把这个包装在一个额外的中间件/function中。 保持类似于标准节点样式的function的签名。 (第一个参数错误,跟随实际数据的参数。)这样,客户端很容易处理你的响应,因为你所要做的就是查看success
域。