如何在Express中获取Axios GET请求Payload里的邮箱和密码?
解决方案
推荐方案:改用POST请求(安全规范)
登录属于敏感操作,GET请求的参数会暴露在URL中存在安全风险,优先用POST请求传递数据。
客户端代码修改
将axios.get替换为axios.post,直接把数据作为第二个参数传入:
axios.post("http://localhost:4000/loginUser", { email: enteredEmail, password: enteredPass })
服务器端代码调整
- 先确保服务器已启用JSON请求体解析中间件(在入口文件添加):
app.use(express.json());
- 修改接口为
POST类型,从req.body获取参数:
app.post("/loginUser", async (req, res) => { try { const { email, password } = req.body; // 这里编写你的登录逻辑 } catch (error) { res.status(400).send("invalid credentials"); } });
备选方案:用GET请求传递Query参数(不推荐)
如果必须保留GET请求,通过axios的params配置项传递参数,它会自动处理特殊字符(如@)的编码和解码。
客户端代码修改
axios.get("http://localhost:4000/loginUser", { params: { email: enteredEmail, password: enteredPass } })
服务器端代码调整
从req.query中获取参数:
app.get("/loginUser", async (req, res) => { try { const { email, password } = req.query; // 这里编写你的登录逻辑 } catch (error) { res.status(400).send("invalid credentials"); } });
问题原因说明
- GET请求按HTTP规范不携带请求体,你之前用
axios.get传入的{ email: ... }属于config的data字段,不会被发送到服务器,因此req.body为空。 - 手动拼接URL参数时,
@这类特殊字符未经过URL编码,导致服务器解析异常;而axios的params配置会自动编码特殊字符,服务器的req.query会自动解码,因此能正常获取邮箱。
内容的提问来源于stack exchange,提问作者Nitin Bhakar
相关产品推荐
相关产品推荐

