使用 Express Validator 和 Mongoose 验证唯一文本



我有一个名为"articles

我已经配置了以下规则,用于在更新记录时验证文章的"title"字段。

validator.body('title').custom( (value, {req}) => {
console.log(value, req.params.id)
return Article.find({ title:value, _id:{ $ne: req.params.id } })
.then( article => {
if (article) {
return Promise.reject('Title already in use');
}
})
})

所以基本上它应该检查集合中是否存在"title",并且它不应该与我正在更新的 ID 相同。

console.log(value, req.params.id)行打印正确的标题和 ID,但验证始终显示"标题已在使用中"。即使我使用完全不同的标题,但根本没有使用。

知道出了什么问题吗?

您应该使用 findOne 查询以获得更好的性能,并检查数据是否为空,如波纹管所示。

validator.body('title').custom( (value, {req}) => {
console.log(value, req.params.id)
return Article.findOne({ title:value, _id:{ $ne: req.params.id } })
.then( article => {
if (article !== null) {
return Promise.reject('Title already in use');
}
})
})

愚蠢的错误,

if (article) {

应该是

if (article.length) {

而且效果很好。

相关内容

  • 没有找到相关文章

最新更新