javascript 通过Express router.put使用Sequelize更新JSON文件中的所有元素

vh0rcniy  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(80)

我正在尝试创建一个Express路由器路由,该路由允许我更新包含有关“成员”数据的MySQL架构模式中的members表包含许多列,例如member_id、forename、surname、address等。我创建了一个Express路由,它允许我更新(使用Sequelize更新方法)表中的单个列,方法是指定特定列-在下面的示例中,列'forename'。此代码已使用Insomnia成功测试。

router.put("/byId/", async (req, res) => {
  const { forename, member_id } = req.body
  await Members.update({forename: forename}, {where:{ member_id: member_id}})
  res.json(forename)
});

虽然我可以在const定义和Sequelize update方法中添加所有表列,但我想知道是否有一种方法可以编写此代码,以便它读取在JSON中找到的任何键值对,并更新存在键值对的所有字段。
我使用下面的路由器执行与创建成员时所考虑的方法类似的操作-其中没有具体指定各个列:

router.post("/", async (req, res) => {
      const member = req.body;
      await Members.create(member);
      res.json(member);
    });

因此,我尝试按照与创建代码类似的方法修改我的更新路由器,如下所示:

router.put("/byId/", async (req, res) => {
      const member = req.body
      await Members.update(member, {where:{ member_id: member_id}})
      res.json(member)
    });

但是,这会引发“错误:从对端接收数据时失败”错误,并导致节点服务器崩溃,并显示错误“ReferenceError:member_id未定义”。
后一个错误对我来说是有意义的--我试图更新一个特定member_id的记录,但没有定义member_id。我只是不清楚如何在保留我所寻找的“更新所有存在键值对的字段”功能的同时定义它。也不清楚解决这个问题是否足以让这个方法像我所希望的那样工作。

rta7y2nd

rta7y2nd1#

根据Dave的评论“成员ID是成员的属性,必须作为成员访问。",这是一个简单的修复:

router.put("/byId/", async (req, res) => {
      const member = req.body
      await Members.update(member, {where:{ member_id: member.member_id}})
      res.json(member)
    });

相关问题