Postman POST新增PostgreSQL数据报Cannot read property of undefined如何解决
问题修复方案
核心报错原因
- 缺少Express的JSON请求体解析中间件,Express 4.16+ 版本默认不会解析POST请求的JSON格式请求体,导致
req.body为undefined,访问user.name等属性时触发报错。
其他存在的问题
- 直接拼接SQL语句存在严重的SQL注入风险,应该使用参数化查询
client.end写法错误(未加括号执行),且不应该在每次请求后关闭数据库连接,持续复用连接即可- 字符串类型的字段值拼接时没有统一加引号,比如
user.name未加引号会导致SQL语法错误
修复后完整代码
const client = require('./database.js') const express = require('express'); const app = express(); // 新增:解析JSON格式请求体的中间件 app.use(express.json()); // 如需支持表单格式的请求体可再加下面这行 app.use(express.urlencoded({ extended: true })); app.listen(3300,()=>{ console.log("Server is now listening at port 3300"); }) client.connect(); app.get('/users',(req,res)=>{ client.query(`Select * from users`,(err,result)=>{ if(err) { return res.status(500).send(err.message); } res.send(result.rows); }); }) app.get('/users/:id', (req, res)=>{ // 改成参数化查询避免注入风险 client.query('Select * from users where id = $1', [req.params.id], (err, result)=>{ if(err) { return res.status(500).send(err.message); } res.send(result.rows); }); }) app.post('/users', (req, res)=> { const user = req.body; console.log(user) // 使用参数化查询,$1对应第一个参数,$2对应第二个,以此类推 const insertQuery = `insert into users(name, email, price, id) values($1, $2, $3, $4)` client.query(insertQuery, [user.name, user.email, user.price, user.id], (err, result)=>{ if(err){ console.log(err.message) return res.status(500).send('插入失败:' + err.message); } res.send('Insertion was successful') }) })
Postman请求配置注意事项
发送POST请求时,需要在Body标签选择raw格式,下拉选择JSON,然后填写符合格式的请求体,示例:
{ "name": "测试用户", "email": "test@example.com", "price": "99", "id": "1001" }
内容的提问来源于stack exchange,提问作者NoushadM
相关产品推荐
相关产品推荐

