如何修复Expo React Native中的Axios -404(ERR_BAD_REQUEST)错误?
排查Expo React Native中Axios POST请求404问题的实用步骤
1. 先确认后端POST接口是否真的存在
Postman GET请求能通不代表/auth/login的POST路由已配置,比如用Express的后端,得确保有类似这样的代码:
app.post('/auth/login', (req, res) => { // 这里是登录逻辑 })
别只写了GET路由就完事。
2. 检查请求头和数据格式是否匹配后端要求
Axios默认会把POST数据转成JSON格式(Content-Type: application/json),但有些后端可能只接受表单格式(application/x-www-form-urlencoded),或者没开启JSON解析中间件:
- 如果后端需要JSON:先确认后端加了解析中间件,比如Express的
express.json() - 如果需要表单格式:修改请求代码,用
qs库处理数据:import qs from 'qs'; axios.post(`http://myip:19000/auth/login`, qs.stringify({ email: email.value, password: password.value, }), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
3. 验证请求数据是否有效
先打印email.value和password.value,确认这俩值是对的,没有空值或格式错误(比如邮箱少了@、密码长度不够)。也可以直接把这俩值复制到Postman里发POST请求,如果Postman也失败,那问题肯定在后端;如果Postman能成功,再找前端和Postman请求的差异。
4. 检查Expo的网络访问配置
如果是在模拟器或真机上测试:
- Android模拟器访问本地后端,要把
myip换成10.0.2.2 - iOS模拟器可以用
localhost或者你的实际IP - 还要确保后端开启了跨域允许,比如用
cors中间件允许Expo设备的IP访问
5. 打印完整错误信息定位问题
把Axios的错误详情打出来,看后端返回的具体提示:
axios.post(`http://myip:19000/auth/login`, { email: email.value, password: password.value, }) .catch(err => { console.log('后端返回的错误内容:', err.response?.data); console.log('状态码:', err.response?.status); console.log('错误消息:', err.message); })
这些信息能直接告诉你是路由不存在、参数错了还是权限问题。
内容的提问来源于stack exchange,提问作者sof123
相关产品推荐
相关产品推荐

