表达 - 解决 - 猫鼬错误传播

时间:2015-11-16 11:53:10

标签: node.js express mongoose middleware restify

我在使用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"jqxhrreseponseText: "{"statusCode" : 400}"相似(但已解析为JS)。消息failed to validate model未发送给客户端。我认为我误解了err在我的服务器端错误处理程序中的对象类型。有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是写这个问题的一个案例,让我想到了一个正确的问题,要求自己回答这个问题。

节点使用的V8错误对象在转换为JSON时不会发送堆栈,消息等附加信息。通过阅读Error对象here的属性来解决我的问题。

特别是使用以下处理程序,错误成功中继到客户端

onError : function(err, req, res, next){
    res.status(400).json({
      message : err.message,
      stack : err.stack
    })
  }