我在使用express-mongoose-restify提供错误消息时遇到问题。
我的架构有一个类似
的钩子myschema.pre('save', function(next){
// If validation fails
next(new Error('failed to validate model'))
})
对于错误处理,我有(类似于)以下代码
resify.serve(express.Router(), mongoose.model('myschema', {
onError: function(err, req,res,next){
console.log(err)
res.status(400).json(err)
}
})
验证失败时输出到控制台的输出如下:
{ [Error: failed to validate model] statusCode : 400 }
在我的客户端,我有以下(jquery)ajax错误处理程序:
$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
console.log(jqxhr)
console.log(thrownError)
});
对于responseJSON, thrownErorr
等于"Bad Request"
且jqxhr
与reseponseText: "{"statusCode" : 400}"
相似(但已解析为JS)。消息failed to validate model
未发送给客户端。我认为我误解了err
在我的服务器端错误处理程序中的对象类型。有什么想法吗?提前谢谢!
答案 0 :(得分:0)
这是写这个问题的一个案例,让我想到了一个正确的问题,要求自己回答这个问题。
节点使用的V8错误对象在转换为JSON时不会发送堆栈,消息等附加信息。通过阅读Error
对象here的属性来解决我的问题。
特别是使用以下处理程序,错误成功中继到客户端
onError : function(err, req, res, next){
res.status(400).json({
message : err.message,
stack : err.stack
})
}