【问题标题】:Ionic React / Capacitor, requests work on web version and with postman but not on a deviceIonic React / Capacitor,请求适用于网络版本和邮递员,但不适用于设备
【发布时间】:2020-12-10 02:40:19
【问题描述】:

我正在使用 axios 发出请求以从我的外部 API(它是带有 ExpressJS 和 Nginx 的 HTTP AWS 服务器)获取数据。我在本地机器上使用 Ionic 应用程序的 Web 版本对其进行了测试,一切正常。如果我使用手机的浏览器,我也可以获取数据。

邮递员也是如此,我可以毫无问题地获取数据。

这些请求不起作用的唯一地方是实际设备。查看 Android Studio 控制台,错误是:“Msg: Network Error”(无法弄清楚如何从 axios 错误对象中获取更多信息)。

我按照官方 Ionic 文档配置了 CORS。我已经设置了所有需要的来源和选项(不能使用 * origin 因为我的请求必须使用凭据)。 Express 配置如下所示:

const corsOptions = {
  origin: [
    'http://localhost:8100',
    'http://localhost:8080',
    'http://localhost',
    'capacitor://localhost',
    'ionic://localhost',
  ],
  credentials: true,
  optionsSuccessStatus: 200,
  exposedHeaders: ["set-cookie"]
}

// Enable preflight requests for all routes
app.options('*', cors(corsOptions));


app.use(cors(corsOptions));

在客户端(请求示例):

try {
  const response = await axios('http://my.api.url', {
    method: 'get',
    withCredentials: true,
      headers: {
        'Accept': 'application/json'
      }
    });
  
  const data = response.data;
      
  // Do something with the data
      
} catch(error) {
  console.log(error);       
};

我认为它与Capacitor有关,也许非https API存在问题(但问题是为什么它适用于Web版本)。我尝试为我的请求禁用凭据,但错误再次发生。删除 Nginx 似乎也没有任何改变。

更新:axios 也说请求已发送,但服务器没有响应。

【问题讨论】:

    标签: javascript reactjs ionic-framework axios


    【解决方案1】:

    我整理好了,我得跟着做。

    1. 必须向我的网络服务器添加 SSL(我使用了letsencrypt)。

    2. 必须将其添加到电容器.config.json:

      “服务器”:{ “允许导航”:[ “我的.api.url” ] }

    Official Capacitor Documentation - Common Configuration

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2020-11-08
      • 2021-10-06
      • 2021-08-04
      • 2020-11-20
      • 2021-05-24
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多