You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:27:03