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
相关产品推荐
相关产品推荐

