1

我有一个静态方法设置,它将验证对象是否正确遵循模型的模式,并且验证本身工作得很好,但我无法让 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 错误)

谢谢

4

1 回答 1

0

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

fieldSchema.statics.testValidate = function(fieldData) {
    return new this(fieldData).validate()
}
于 2016-05-08T16:56:46.087 回答