Мангуст нашел возвращенный неопределенный документ - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть код, который выглядит следующим образом.Буквально только косметические изменения и удаления, сделанные из моего фактического кода:

Entry.find(conditions)
.select('ymd intentions outcomes goalCounts')
.lean()
.exec()
.then(function (entries) {
  if (!entries.length) {
    res.write(']')
    res.end()
  }
  entries[entries.length-1].isLast = true
  // more processing of entries etc
}, function (err) {
  // do something with error
})

Обычно это работает, но мой производственный сервер только что сообщил об ошибке: ошибка строки isLast=true с

TypeError: Cannot set property 'isLast' of undefined

Поскольку здесь есть проверка, которая гарантирует, что сам массив не пуст, я знаю, что то, что было передано в эту функцию, было непустым массивом, последний элемент которого сам был неопределен.ymd является обязательным полем, поэтому не должно быть никаких результатов, которые будут {}.

Это ожидаемое поведение при каких-либо условиях (что-то связанное с lean()?) Или оно представляеткакая-то ошибка монго?

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш код продолжается после проверки if, о которой вы упомянули, поэтому, если entries имеет длину 0, вы получите сообщение об ошибке.

Возврат эфира после вызова res.end(),или поместите строку с ошибкой в ​​предложение else:

if (!entries.length) {
  res.write(']')
  res.end()
  return;
}
entries[entries.length-1].isLast = true

ИЛИ

if (!entries.length) {
  res.write(']')
  res.end()
} else {
  entries[entries.length-1].isLast = true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...