我有一个名为"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) {
而且效果很好。