如何正确修改Sequelize查询请求返回的响应对象?
问题原因
你的核心错误出在这两行代码:
let cardToUpdate = JSON.stringify(card) cardToUpdate.position = newPosition;
JSON.stringify()方法返回的是JSON格式字符串,不是JS对象,你给字符串添加自定义属性position是无效操作,不会修改字符串内容,所以返回的结果自然没有变化。- 补充注意:Sequelize的
findOne返回的是模型实例对象,不是普通JS对象,直接修改属性需要遵循Sequelize的操作规则。
正确的修改方式
方案1:仅修改接口返回值,不同步更新数据库
如果你只是需要调整返回给前端的内容,不需要把修改写入数据库,用toJSON()方法把模型实例转为普通JS对象即可:
async updateCardPosition(req,res) { const oldPosition = Number(req.params.oldposition); const newPosition = Number(req.params.newposition); const listId = Number(req.body.listId); try { const card = await Card.findOne({where :{ position : oldPosition, list_id:listId }}); // 转为普通JS对象 let cardToUpdate = card.toJSON() cardToUpdate.position = newPosition; res.send(cardToUpdate); }catch (error) { res.status(500).send(error); } }
方案2:修改值同步到数据库
如果你需要把新的position值持久化到数据库,调用Sequelize实例的save方法即可:
async updateCardPosition(req,res) { const oldPosition = Number(req.params.oldposition); const newPosition = Number(req.params.newposition); const listId = Number(req.body.listId); try { const card = await Card.findOne({where :{ position : oldPosition, list_id:listId }}); // 直接修改实例属性 card.position = newPosition; // 保存变更到数据库 await card.save(); res.send(card); }catch (error) { res.status(500).send(error); } }
内容的提问来源于stack exchange,提问作者julBayonna
相关产品推荐
相关产品推荐

