Javascript Mongoose-如何在预(保存/更新)中间件中抛出多个错误?

Javascript Mongoose-如何在预(保存/更新)中间件中抛出多个错误?,javascript,node.js,mongodb,mongoose,hook,Javascript,Node.js,Mongodb,Mongoose,Hook,我在模型中有一些预保存和更新挂钩,我需要同时显示所有验证错误 文档中有关于下一个功能的信息: 多次调用next()是不允许的。如果调用next()时出现错误err1,然后抛出错误err2,mongoose将报告错误err1 参见参考资料 我想像下面的代码一样返回两个或多个验证错误,但像文档一样,只抛出第一个错误 Schema.pre('save',函数(下一步){ 如果(this.prop1=='foo') 下一步(新错误('Error one')) 如果(this.prop2=='bar')

我在模型中有一些预保存和更新挂钩,我需要同时显示所有验证错误

文档中有关于下一个功能的信息:

多次调用next()是不允许的。如果调用next()时出现错误err1,然后抛出错误err2,mongoose将报告错误err1

参见参考资料

我想像下面的代码一样返回两个或多个验证错误,但像文档一样,只抛出第一个错误

Schema.pre('save',函数(下一步){
如果(this.prop1=='foo')
下一步(新错误('Error one'))
如果(this.prop2=='bar')
下一步(新错误('Error two'))
})

我怎么做?是否有其他选择?

您可以将错误添加到数组中,然后在最后,如果数组长度大于0,您可以通过加入错误来发送一条错误消息

Schema.pre(“保存”,函数(下一步){
让validationErrors=[];
if(this.prop1==“foo”)validationErrors.push(“错误一”);
if(this.prop2==“bar”)validationErrors.push(“错误二”);
如果(validationErrors.length>0){
下一步(新错误(validationErrors.join(“,”));
}
next();
});
但通常我们不使用这种验证。如果您已经在使用mongoose,那么可以使用它的验证

其他一些验证包包括:


  • 你好,Daniel欢迎来到Stack Overflow

    我的方法是将错误保存到一个iterable中,并将iterable作为错误对象发送(或者如果它只接受字符串,则使用
    join()
    字符串化整个内容)

    请检查这是否解决了您的问题,我不知道有任何内在的方式来实现您的最终结果

    Schema.pre('save', function(next) {
      const errors = [];
    
      if (this.prop1 == 'foo')
        errors.push('Error one');
    
      if (this.prop2 == 'bar')
        errors.push('Error two');
    
      if (this.prop1 == 'foo' || this.prop2 == 'bar') next(new Error(errors))
    })
    

    EHH您的回答与我编写代码时的回答相同,向上投票!:DHi,如果以下回答对您有帮助,请不要忘记将其标记为答案。