使用 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');
      }
    })
  })