从Mongoose

时间:2016-02-02 16:29:29

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

我有一个静态方法设置,可以验证对象是否正确遵循模型的模式,并且我已经让验证本身工作正常,但是我无法让Mongoose隐藏{ {1}}错误显示在控制台中。

验证的静态方法是:

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())

注意:我使用Bluebird作为我的JS承诺,因为它与then / catch有任何关系)

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

由于

1 个答案:

答案 0 :(得分:0)

validate已经返回一个promise,因此您无需将其包装在新的promise中。您看到错误记录到控制台的原因是因为您将其包装在新的承诺中,从而阻止原始承诺被捕获,即Unhandled rejection

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