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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:57:01