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

React+Node.js+PostgreSQL实现UPDATE操作报Cannot PUT错误如何解决

UPDATE功能修复方案

1. 修复Cannot PUT /merchants错误

该错误由路由不匹配或请求配置错误导致,按如下规则修改:

  • 确认后端入口文件已注册PUT路由,且已引入express.json()中间件解析JSON请求体:
// 必须放在路由注册前,否则无法解析请求body参数
app.use(express.json())
// 注册PUT路由
app.put('/merchants', 路由处理函数)
  • 前端fetch请求需指定method: 'PUT',正确配置请求头和序列化参数:
const updateMerchant = async (id, name) => {
  const res = await fetch('/merchants', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ id, name })
  })
  // 补充你的响应处理逻辑
}

2. 修复PostgreSQL参数绑定错误

你遇到的bind message supplies 2 parameters, but prepared statement requires 0/1报错,核心是SQL语法和参数映射不匹配,按如下规则修改:

  • PostgreSQL参数占位符无需加引号,双引号在PG中用于标识表名、列名等标识符,不能用于包裹值占位符
  • 执行UPDATE语句后需要新增RETURNING *后缀,才会返回修改后的记录数据
  • 确保占位符序号和参数数组顺序一一对应,$1对应参数数组第一个元素,$2对应第二个元素
    正确的model层方法示例:
// merchant_model.js
const updateMerchant = async (id, name) => {
  const queryRes = await pool.query(
    'UPDATE merchants SET name = $2 WHERE id = $1 RETURNING *',
    [id, name]
  )
  return queryRes.rows[0]
}

3. 修复TypeError: Cannot read property 'rows' of undefined错误

该错误由异步方法未等待执行完成导致,pool.query是异步方法,必须用await关键字等待执行完成才能拿到返回结果,同时路由处理函数需要标记为async:

// 后端PUT路由完整写法
app.put('/merchants', async (req, res) => {
  try {
    const { id, name } = req.body
    const updatedData = await updateMerchant(id, name)
    res.status(200).json(updatedData)
  } catch (err) {
    console.error(err)
    res.status(500).json({ error: '更新失败' })
  }
})

内容的提问来源于stack exchange,提问作者questionto42

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:18:03