express-restify-mongoose 错误传播

express-restify-mongoose error propogation

我在使用 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)
});

thrownErorr 等于 "Bad Request" 并且 jqxhr 对于 responseJSON 具有 reseponseText: "{"statusCode" : 400}" 相似(但解析为 JS)。消息 failed to validate model 未发送到客户端。我认为我误解了 err 在我的服务器端错误处理程序中的对象类型。有什么想法吗?提前致谢!

在这种情况下,写问题让我想到了正确的问题来问自己以便回答它。

节点使用的V8错误对象在转换为JSON时不发送堆栈、消息等附加信息。通过阅读 Error 对象 here.

的属性,我的问题得到了解决

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

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