我正在尝试在哈巴狗页面中更新表格的单行。该表的行是从MongoDB填充的。这些表格行的单元格使用文档数据(例如doc.name
,而实际表格行包含文档ID,例如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)
)
}
我可以输入并提交更改,然后通过快速路由../update/:id
将URL传递回去,从而使请求等于GET ../update/testID123?name=testName&age=42 404
。我知道这意味着找不到ID,但是为什么不知道我感到困惑?据我了解,URL的最后一部分表示为req.params
,而?
之后的所有内容都是req.body
?
但是,当我通过邮递员使用已定义的PATCH
请求执行相同的请求时,我收到一个不同的错误消息,提到该req.body is not iterable
,但我不知道如何在自动选择的GET
请求和所需的PATCH
请求。值得注意的是,我已经遵循了this post中提到的“不可迭代”错误的路径,所以我认为这不是真正的问题。
到今天结束,我的大脑变得软弱无力,因此对错过任何关键细节并表示感谢,深表歉意。
答案 0 :(得分:0)
通过this post中的建议找到了答案。我正在访问一个不存在的对象的各个方面,其方式不适合链接文章中所述的迭代。我以为req.body not iterable
错误是一个红色鲱鱼是错误的,因此我重新实现了task of Object.keys(req.body)
循环,而不是将[task.propName] = task.value
附加到updateOperations
数组中,来实现[task] = req.body[task]
。