使用 Express Validator & Mongoose 验证唯一文本
Validate unique text using Express Validator & Mongoose
我有一个 mongodb collection 名为“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" 是否不应该存在于 collection 中并且它不应该与我正在更新的 ID 相同。
行 console.log(value, req.params.id)
正在打印正确的标题和 ID,但验证始终显示 "Title already in use"。尽管我使用完全不同的标题,但根本没有使用。
知道哪里出了问题吗?
愚蠢的错误,
那个
if (article) {
应该是
if (article.length) {
而且效果很好。
您应该使用 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');
}
})
})
我有一个 mongodb collection 名为“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" 是否不应该存在于 collection 中并且它不应该与我正在更新的 ID 相同。
行 console.log(value, req.params.id)
正在打印正确的标题和 ID,但验证始终显示 "Title already in use"。尽管我使用完全不同的标题,但根本没有使用。
知道哪里出了问题吗?
愚蠢的错误,
那个
if (article) {
应该是
if (article.length) {
而且效果很好。
您应该使用 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');
}
})
})