AxiosError:网络错误 --- ReactNative 与 Expo

问题描述 投票:0回答:2

我正在使用 axios 开发一个 expo go 应用程序,我正在尝试连接到我当前正在构建的 api,但我收到了这个 [AxiorError:网络错误]。 我是 React Native 开发的新手,但我已经从事移动开发,我的 url 是有效的(我还使用模拟器的浏览器进行了测试,因此它通过模拟器网络访问 api 并获得正确的结果)

我使用的是安卓

这是我的代码:

import axios from "axios";

const api = axios.create({
    baseURL: 'http://192.xxx.x.x:81/api'
});

export default api;

我有这个方法:

import api from "./Api";
    
export async function searchMenu() {
    
    const response = await api.get('/menu');                

    return response.data;
    
}

我打电话给它

import { searchMenu } from "@/services/MenuApi"

export default function Home(){   
console.log(searchMenu())
  }

编辑: 这是我打电话时的结果:

searchMenu().then(console.log).catch((err) => console.log(err.response?.data, err.toJSON()))

LOG  undefined {"code": "ERR_NETWORK", "columnNumber": undefined, "config": {"adapter": [Function xhrAdapter], "baseURL": "http://192.168.0.3:81/api", "data": undefined, "env": {"Blob": [Function Blob], "FormData": [Function FormData]}, "headers": {"Accept": "application/json, text/plain, */*"}, "maxBodyLength": -1, "maxContentLength": -1, "method": "get", "timeout": 0, "transformRequest": [[Function transformRequest]], "transformResponse": [[Function transformResponse]], "transitional": {"clarifyTimeoutError": false, "forcedJSONParsing": true, "silentJSONParsing": true}, "url": "/menu", "validateStatus": [Function validateStatus], "xsrfCookieName": "XSRF-TOKEN", "xsrfHeaderName": "X-XSRF-TOKEN"}, "description": undefined, "fileName": undefined, "lineNumber": undefined, "message": "Network Error", "name": "AxiosError", "number": undefined, "stack": "AxiosError: Network Error
typescript react-native axios expo
2个回答
0
投票

我认为您需要更改 Android 清单文件以支持 HTTP 请求,默认情况下 Android 仅支持 HTTPS 请求,我可以看到您的

baseUrl
仅基于 HTTP。

尝试将usesCleartextTraffic放入您的应用程序标签中

<application
    ...
    android:usesCleartextTraffic="true"
    ...
/>

如果有的话,您也可以尝试使用 HTTPS 的 API,它将无需任何更改即可运行

https://192.xxx.x.x:81/api


0
投票

弄清楚了,问题出在我的 API 中:

如果有人使用 .net6+ 的 ASP.NET API 并遇到此问题,请在您的 Program.cs 文件中注释以下行:

app.UseHttpsRedirection(); 

我仍然不知道为什么该网址在模拟器浏览器中有效,但在模拟器应用程序中无效,但现在可以工作了

© www.soinside.com 2019 - 2024. All rights reserved.