Mongoose - 'pre'中间件中的返回错误

时间:2016-12-20 13:31:54

标签: node.js express mongoose

如果schema.pre('save')中的验证失败,如何发送自定义错误消息?例如,如果我有聊天功能,您创建新会话,我想检查与给定参与者的对话是否已经存在,所以我可以这样做:

ConversationSchema.pre('save', function(next, done) {
    var that = this;
    this.constructor.findOne({participants: this.participants}).then(function(conversation) {
        if (conversation) {
            // Send error back with the conversation object
        } else {
            next();
        }
    });
});

2 个答案:

答案 0 :(得分:8)

在调用vars时传递Error对象以报告错误:

next

文档here

答案 1 :(得分:0)

我同意JohnnyHK的回答,除了似乎不可能向Error对象添加自定义属性。收到错误并尝试访问该属性时,该值是不确定的,因此解决方案是您可以发送自定义错误消息,但不能添加自定义属性。我的代码如下:

ConversationSchema.pre('save', function(next) {
    this.constructor.findOne({participants: this.participants}, function(err, conversation) {
        if (err) next(new Error('Internal error'));
        else if (conversation) next(new Error('Conversation exists'));
        else next();
    });
});