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

