Обновление конкретного документа MongoDB на основе идентификатора, переданного из экспресс-маршрута на основе мопса - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь обновить одну строку таблицы на странице мопса. Строки этой таблицы заполняются из MongoDB. Ячейки этих строк таблицы заполняются с использованием данных документа, например, doc.name, тогда как фактическая строка таблицы содержит идентификатор документа, например, doc._id.

tr(id = doc._id)
 form.hidden(method = "patch", action = "../update" + doc._id)
  td button.btn(type = "submit") Update
  td
   input(name = "name", value = "doc.name")
  td
   input(name = "age", value = "doc.age")

Маршрут для этой операции показан ниже:

router.patch("../update/:id", Controller.update)

Функция обновления контроллера:

exports.update = (req, res, next) => {
 const id = req.params.id;
 const operations = {};
 for(const task of req.body){
  operations[task.propName] = task.value;
 }
 Feature.update({_id: id}, {$set: operations})
 .exec()
 .then(
  res.status(200)
  )
 .catch(
 res.status(500)   
 )
}

Я могу ввести и отправить изменение, затем передать URL-адрес обратно по экспресс-маршруту ../update/:id, чтобы запрос равнялся GET ../update/testID123?name=testName&age=42 404. Я понимаю, что это означает, что идентификатор не может быть найден, но я озадачен, почему бы и нет? Насколько я понимаю, последний раздел URL был представлен как req.params, а что-то после ? было req.body?

Однако, когда я выполняю идентичный запрос, используя определенный запрос PATCH через Почтальона, я получаю другую ошибку, в которой говорится, что req.body is not iterable, но я не понимаю, как принудительно провести различие между автоматически выбранным GET запрос и желаемый PATCH запрос. Стоит отметить, что я уже прошел путь к «не повторяемой» ошибке, описанной в этом посте , поэтому я не думаю, что это реальная проблема.

Это конец дня, и мой мозг превратился в кашу, поэтому извиняюсь за упущение каких-либо ключевых деталей, и спасибо за чтение.

1 Ответ

0 голосов
/ 14 января 2019

Нашел ответ благодаря совету, данному в этом посте . Я получал доступ к аспектам объекта, который не существует, способом, который не подходил для итерации, как изложено в связанном посте. Я ошибался, полагая, что ошибка req.body not iterable была красной сельдью, поэтому я повторно реализовал цикл task of Object.keys(req.body) и вместо добавления [task.propName] = task.value в массив updateOperations мне пришлось реализовать [task] = req.body[task].

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