Проверьте уникальный текст, используя Express Validator & Mongoose - PullRequest
0 голосов
/ 16 января 2020

У меня есть коллекции mongodb с именем "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');
      }
    })
  })

Таким образом, он должен проверять, не существует ли в коллекции «заголовок» и не должен ли он совпадать с идентификатором, который я обновляю.

Строка console.log(value, req.params.id) печатает правильный заголовок и ID, но проверка всегда гласит: «Название уже используется». Хотя я использую совершенно другое название, которое вообще не используется.

Есть идеи, что случилось?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Вам следует использовать запрос 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');
      }
    })
  })
0 голосов
/ 16 января 2020

Глупая ошибка,

if (article) {

должна быть

if (article.length) {

И все работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...