Node-Postgres插入报错:外键约束异常,硬编码值可正常插入
问题解决思路与方案
临时修复方案
直接清理掉leadProviderId值中的双引号,再传入INSERT语句:
// 移除字符串首尾的双引号(控制台显示的"对应实际字符串中的双引号) const cleanLeadId = record.leadProviderId.replace(/^"|"$/g, ''); // 使用清理后的值执行插入 const result = await pool.query( 'INSERT INTO your_table (prov_id, ...) VALUES ($1, ...) RETURNING *', [cleanLeadId, ...otherValues] );
根源排查与根治
问题核心是参数被双重JSON序列化,原本的prov_2被包裹成了"prov_2"(控制台的"prov_2"是HTML转义后的显示,实际值是带双引号的字符串)。
后端排查点
- 检查Express中间件,确保只挂载一次
express.json(),重复挂载会导致已解析的JSON被再次序列化:// 正确写法:全局仅挂载一次 const express = require('express'); const app = express(); app.use(express.json()); // 不要重复添加此中间件
前端排查点
- 检查请求发送逻辑,避免手动重复序列化数据:
// 错误示例:手动JSON.stringify后发送,axios/fetch会自动序列化一次 axios.post('/api/insert', JSON.stringify({ leadProviderId: 'prov_2' })); // 正确示例:直接传入JavaScript对象 axios.post('/api/insert', { leadProviderId: 'prov_2' }); - 若用表单提交,检查是否同时开启
enctype="application/json"和手动处理表单数据,导致重复转义。
内容的提问来源于stack exchange,提问作者user19667668
相关产品推荐
相关产品推荐

