猫鼬唯一,如果不为null,则使用mongoose-unique-validator

时间:2018-09-18 12:36:09

标签: node.js mongodb express mongoose

所以我有以下架构:

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

但是在此之后,空值不再被视为partialIndex,而是报告“ Youtube ID已经存在。” ,并且它正在检查的值为空。

如何跳过空值或以其他方式实现自定义消息?

0 个答案:

没有答案