Подавление/перехват ошибки ValidationError от Mongoose

У меня есть настройка статического метода, которая проверяет, правильно ли объект следует схеме модели, и у меня сама проверка работает нормально, но я не могу заставить 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 ....

(Примечание: я использую Bluebird для своих обещаний JS, если это как-то связано с then/catch)

Выполнение скрипта продолжается вместе с кодом, так что это означает, что он на самом деле не уничтожает скрипт или что-то еще, а просто записывает ошибку в консоль. Но поскольку эта функция предназначена для проверки, на самом деле это не «ошибка», так есть ли способ скрыть это от консоли? (Только для этой функции, а не для ВСЕХ ошибок Mongoose)

Спасибо


person Justin    schedule 02.02.2016    source источник


Ответы (1)


validate уже возвращает промис, поэтому вам не нужно заключать его в новый промис. Причина, по которой вы видите ошибку, зарегистрированную в консоли, заключается в том, что вы заключаете ее в новое обещание, тем самым предотвращая перехват исходного обещания, то есть Unhandled rejection.

fieldSchema.statics.testValidate = function(fieldData) {
    return new this(fieldData).validate()
}
person ReedD    schedule 08.05.2016