Mongoose уникальный, если не нулевой, с mongoose-unique-validator - PullRequest
0 голосов
/ 18 сентября 2018

Итак, у меня есть следующая схема:

const VideoSchema = mongoose.Schema({
    youtube: {
        type: String,
        index: {
            unique: true,
            partialFilterExpression: { youtube: { $type: 'string' } }
        },
        validate: {
            validator: (v) => /^[a-zA-Z0-9-_]{11}$/.test(v) || v == null,
            message: "Youtube ID doesn't match pattern"
        }
    }
})

И это работает нормально.У меня могут быть нулевые значения и строковые значения, которые являются уникальными.

Затем я реализовал библиотеку: mongoose-unique-validator

Я реализовал это, потому чтоМне нужны пользовательские ошибки для уникальных значений, а ошибки mongodb просто не читаются.

VideoSchema.plugin(uniqueValidator, {
    message: ({ path, value }) => {
        if (path == 'youtube') return 'Youtube ID already exists.'
    }
})

VideoSchema.post('save', async function (err, doc, next) { 
    const error = [];
    if (err.name == 'ValidationError') {
        for (const a in err.errors) error.push(err.errors[a].message)
        return next(error)
    }
    else return next(err)
})

Но после этого нулевые значения больше не рассматриваются как partIndex, вместо этого он сообщает 'Идентификатор Youtube уже существует.' и проверяемое значение было нулевым.

Как я могу пропустить нулевые значения или реализовать пользовательские сообщения другим способом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...