AXIOS 调用在 React-Native 0.63 中给出网络错误

Posted

技术标签:

【中文标题】AXIOS 调用在 React-Native 0.63 中给出网络错误【英文标题】:AXIOS call giving Network Error in React-Native 0.63 【发布时间】:2021-05-25 11:57:23 【问题描述】:

我正在尝试使用常见的 HTTPSERVICE 方法调用 API,奇怪的是,每当连接调试器时我都会收到响应,但是当调试器未连接时 API 会抛出网络错误。

React-Native 版本:0.63.2 axios 版本:0.18.0

const sendRequest = async (url, method, params, data=, headers = ) => 
  try 
    const options = 
      url,
      method,
      params,
      data,
      headers,
    
    console.log(options);
    return await axios(options);
   catch (err) 
    console.log("request error",err);
    throw err;
  


function* HttpService(url, methodType, params, data, headerParams = ) 
  try 
    const user = yield select(state => state.ssoReducer.user);
    if (isTokenExpired(user.token)) 
      yield call(getPingFedToken);
    
    const signIn = yield select(state => state.ssoReducer);
    const authToken = signIn.user?.token;
    const headers = 
      Authorization: `$authToken`,
      'SWAP-MOBILE-APP': true,
      "Content-Type": "application/x-www-form-urlencoded",
      ...headerParams
    ;
    return yield call(sendRequest, url, methodType, params,  data , headers)
   catch (error) 
    console.log("http error",error);
    if (error.response.status === (403)) 
      yield put(
        type: SSO_FAILURE,
        payload: "Unauthorised alert"
      );
    
    throw error;
  


export default HttpService;

enter image description here

【问题讨论】:

【参考方案1】:

据我所知,问题不在于这部分代码。 我怀疑你创建headerParams 的方式。

这是你需要做的。

检查您在此流程中使用的所有全局方法,例如。 URLSearchParams 确保它们存在于web component 层中,该层是与您使用的 react-native 版本相关的 JS 引擎的一部分。

为什么:

因为,当你连接调试器时;您不是在 React Native 的引擎中执行您的 JS 代码,而是在您正在调试的 chrome 的引擎中执行您的 JS 代码。

这是 react-native 世界中的一个已知问题,为避免它,我建议您使用另一个调试器,例如 https://infinite.red/reactotron

【讨论】:

尝试安装 reatcotron,api 仍然失败。我们将 url 更改为 http 而不是 https,它开始工作了!不知道为什么 https 不起作用。有什么想法吗?

以上是关于AXIOS 调用在 React-Native 0.63 中给出网络错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 axios 在 react-native 中使用 POST 方法获取 API 数据

在 react-native android 应用程序中使用 axios 传递参数

在 react-native 中发送请求标头/授权 axios.post

如何在 react-native 中处理 promise

Axios 承诺处理 - 在 react-native 中获取“可能的未处理承诺拒绝 - 类型错误:网络请求失败”

在 Cloudinary 上使用 axios 上传 React-Native imagePicker