根据从基于哈巴狗的快递路线传入的ID更新特定的MongoDB文档

时间:2019-01-11 17:15:42

标签: node.js mongodb express mongoose pug

我正在尝试在哈巴狗页面中更新表格的单行。该表的行是从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中提到的“不可迭代”错误的路径,所以我认为这不是真正的问题。

到今天结束,我的大脑变得软弱无力,因此对错过任何关键细节并表示感谢,深表歉意。

1 个答案:

答案 0 :(得分:0)

通过this post中的建议找到了答案。我正在访问一个不存在的对象的各个方面,其方式不适合链接文章中所述的迭代。我以为req.body not iterable错误是一个红色鲱鱼是错误的,因此我重新实现了task of Object.keys(req.body)循环,而不是将[task.propName] = task.value附加到updateOperations数组中,来实现[task] = req.body[task]