Почему Array.some () не возвращает true? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь выяснить, сделал ли пользователь запрос уже. Маршрутизатор ниже использует функцию Array.some (), чтобы найти идентификатор пользователя, но он всегда возвращает false.

router.post('/requests/myStatus', auth, (req, res) => {
  const userID = req.user
  const listing = req.body.listing
  try {
      Listing.findOne({ _id: listing }).then(listing => {
        if (listing.members.includes(userID)) {
          res.status(200).send({ msg: 'Joined' })
        } else if (listing.requests.some(request => request.user == userID)) {
          res.status(200).send({ msg: 'Requested' })
        } else {
          res.status(200).send({ msg: 'Empty' })
        }
    })
  } catch (error) {
    res.status(404).send(error)
  }
})

Я нахожу нужный список и проверяю, является ли пользователь с идентификатором X уже участником, если нет, проверяю, уже сделал ли он запрос.

Попробую этот фрагмент кода в Консоль MDN возвращает значение true, как и ожидалось.

const array = [ { status: 0, user: '5dd69677de9b1e3484de78af' } ];
console.log(array.some((element) => element.user == '5dd69677de9b1e3484de78af'));

В приведенном выше массиве показан фактический ответ, который я получу. Я зарегистрировал userID, а также request.user, чтобы убедиться, что они на самом деле одинаковы. Я зарегистрировал массив запросов, весь список и все, что между ними. Замена userID на строку с идентификатором в some-функции также не помогла. Мой коллега и я в растерянности ...

Соответствующая часть схемы mon goose:

const listingSchema = mongoose.Schema({
  members: [{
    type: mongoose.Schema.Types.ObjectId, ref: 'Profile'
   }],
  requests: [{
    _id: false,
    user: {
      type: mongoose.Schema.Types.ObjectId, ref: 'Profile'
     },
    status: {
      type: Number, // 0 - pending | 1 - accepted | 2 - declined | 3 - withdrawn | 4 - expired
      default: 0
    }
   }]
});

Любая помощь будет принята с благодарностью. Заранее спасибо:)

РЕДАКТИРОВАТЬ: В соответствии с запросом, перечисление list.requests:

[ { status: 0, user: 5dd69677de9b1e3484de78af } ]

РЕДАКТИРОВАНИЕ 2: Преобразование сравниваемых идентификаторов в строку решило проблему. Спасибо @ Гринец

1 Ответ

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

Согласно вашему фрагменту

[ { status: 0, user: 5dd69677de9b1e3484de78af } ]

Я предполагаю, что req.user это строка, но вы пытаетесь сравнить строку со значением mon go _id, которое не относится к типу string.

Может быть, попробовать преобразовать оба значения в строку?

listing.requests.some(request => request.user.toString() == userID.toString())

Конечно, только если userID действительно присутствует

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