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

React电影评论App中Express GET接口无法获取req.body值的问题

问题根源与解决方案

核心原因

HTTP GET 请求的设计规范中,请求体(body)并非标准携带内容。尽管部分客户端支持发送带body的GET请求,但Express默认不会解析GET请求的body,这就是app.get('/get')中req.body.username返回undefined的原因。而POST请求是标准允许携带请求体的,因此app.post('/insert')能正常获取req.body的值。


一、修改前端GET请求传参方式

将Axios GET请求的参数从请求体改为查询参数(Query Params):

getMovies = async () => {
    const res = await axios.get('http://localhost:3301/get', {
        params: { // 替换原body为params,传递查询参数
            username: this.state.username,
        }
    })
    this.setState({ recentlyW: res.data })
}

二、修改后端GET接口的参数接收逻辑

后端从req.query而非req.body中获取用户名:

app.get('/get', (req, res) => {
    console.log(req.query.username); // 从req.query获取查询参数
    const username = req.query.username;
    
    // 重要:添加用户名格式校验,避免SQL注入
    if (!/^[a-zA-Z0-9_]+$/.test(username)) {
        return res.status(400).send("无效的用户名格式");
    }

    const sqlGet = `SELECT * FROM movie_reviews_${username} ORDER BY id DESC LIMIT 10`
    connection.query(sqlGet, (err, result) => {
        if (err) {
            console.error(err);
            return res.status(500).send("查询失败");
        }
        res.send(result)
    });
});

额外注意:SQL注入风险

你当前直接将用户名拼接进SQL表名的写法存在严重的SQL注入漏洞。必须先对用户名进行格式校验(如上述代码中的正则校验),避免恶意用户构造特殊字符篡改SQL逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:39