Я пытаюсь обновить одну строку таблицы на странице мопса. Строки этой таблицы заполняются из 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
запрос. Стоит отметить, что я уже прошел путь к «не повторяемой» ошибке, описанной в этом посте , поэтому я не думаю, что это реальная проблема.
Это конец дня, и мой мозг превратился в кашу, поэтому извиняюсь за упущение каких-либо ключевых деталей, и спасибо за чтение.