React Native中Axios请求存在的路由返回404问题求助
问题描述
在React Native应用中发起如下POST请求:
axios.post(`http://${ipAddress}:3001/api/v1/customers/orders/create`, payload)
已确认笔记本上运行的Node服务器存在该路由,且ipAddress为笔记本IP。该请求在Postman中可正常响应,但在RN中发起时服务器无处理,RN返回404错误,错误详情如下:
", "_responseType": "", "_sent": true, "_subscriptions": [], "_timedOut": false, "_trackingName": "unknown", "_url": "http://myIP/api/v1/customers/orders/create", "readyState": 4, "responseHeaders": {"Access-Control-Allow-Origin": "*", "Connection": "keep-alive", "Content-Length": "170", "Content-Security-Policy": "default-src 'none'", "Content-Type": "text/html; charset=utf-8", "Date": "Sun, 10 Sep 2023 16:16:29 GMT", "Keep-Alive": "timeout=5", "X-Content-Type-Options": "nosniff", "X-Powered-By": "Express"}, "responseURL": "http://myIP:3001/api/v1/customers/orders/create", "status": 404, "timeout": 0, "upload": {}, "withCredentials": true}, "status": 404, "statusText": undefined}
明明路由存在,为何RN请求返回404?
可能的原因及解决方案
- 请求方法不匹配:检查Express服务器的路由定义是否为
app.post(...),而非app.get(...)或其他方法。Postman可能自动适配请求方法,但RN中明确使用POST,若服务器路由方法不匹配会直接返回404。 - Payload格式/内容差异:对比Postman和RN发送的payload,检查是否存在格式不一致(比如Postman用JSON格式,RN发送的是FormData或未正确序列化的对象)。可在RN请求中显式设置
Content-Type,确保和Postman一致:axios.post(url, payload, { headers: { 'Content-Type': 'application/json' } }) - IP/端口拼接异常:错误信息里的
_url字段显示http://myIP/api/v1/customers/orders/create(缺少端口3001),但responseURL又包含端口,可能是ipAddress变量拼接时出现异常。直接硬编码IP+端口测试,排除变量解析问题:axios.post('http://192.168.x.x:3001/api/v1/customers/orders/create', payload) - Express中间件顺序错误:虽然响应头有
Access-Control-Allow-Origin: *,但需确保路由定义在CORS中间件之后,否则请求可能被拦截后返回默认404页面,而非路由的正常响应。 - RN调试代理干扰:若开启了RN Debugger或系统代理,可能导致请求被转发到错误地址。关闭调试代理,直接在设备上测试请求是否正常。
内容的提问来源于stack exchange,提问作者realsenorloadenstein
相关产品推荐
相关产品推荐

