我正在尝试创建一个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。我只是不清楚如何在保留我所寻找的“更新所有存在键值对的字段”功能的同时定义它。也不清楚解决这个问题是否足以让这个方法像我所希望的那样工作。
1条答案
按热度按时间rta7y2nd1#
根据Dave的评论“成员ID是成员的属性,必须作为成员访问。",这是一个简单的修复: