【问题标题】:Suppressing/Catching the ValidationError error from Mongoose抑制/捕获来自 Mongoose 的 ValidationError 错误
【发布时间】:2016-05-09 00:56:46
【问题描述】:

我有一个静态方法设置,它将验证对象是否正确遵循模型的架构,并且验证本身工作正常,但我无法让 Mongoose 隐藏 ValidationError 错误显示在控制台中。

验证的静态方法是:

fieldSchema.statics.testValidate = function( field ) {
    return new Promise( ( res, rej ) => {
        new this( field ).validate( err => {
            if ( err ) return rej( err )

            res( true )
        } )
    })
}

然后当我执行它时:

Field.testValidate( fieldData )
    .then(data => {
        console.log('OK!', data)
    })
    .catch( err => {
        console.error('FAILED:',err)
    })
    .finally(() => Mongoose.connection.close())

就像我说的,我可以用它来验证数据,但它总是会显示这个错误:

Unhandled rejection ValidationError: Field validation failed
    at MongooseError.ValidationError ....

注意:我在我的 JS 承诺中使用 Bluebird,以防它与 then/catch 有任何关系)

脚本继续执行代码,这意味着它实际上并没有杀死脚本或任何东西,它只是将错误记录到控制台。但是由于这个函数是用来验证的,它并不是一个真正的“错误”,所以有没有办法从控制台隐藏它? (仅针对此功能,不适用于所有 Mongoose 错误)

谢谢

【问题讨论】:

    标签: mongodb mongoose bluebird es6-promise mongoose-schema


    【解决方案1】:

    validate 已经返回了一个 Promise,所以你不需要将它包装在一个新的 Promise 中。您看到错误记录到控制台的原因是因为您将它包装在一个新的承诺中,从而防止原始承诺被捕获,即Unhandled rejection

    fieldSchema.statics.testValidate = function(fieldData) {
        return new this(fieldData).validate()
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多