Javascript 反应本机:出错时将axios重定向到其他地址

Javascript 反应本机:出错时将axios重定向到其他地址,javascript,reactjs,react-native,axios,Javascript,Reactjs,React Native,Axios,设置:我目前与两名Mac用户在一个组中编码(我正在运行Linux)。我们正在使用React Native制作一个移动应用程序。他们正在一个不适用于Linux的iPhone模拟器上测试该应用程序。我通过将软件包提供给一部物理Android手机来测试这个应用程序。在我尝试向本地服务器发出axios请求之前,这一切都很正常。 在axios请求中,我们输入端点“”。因为我的程序副本运行在移动设备上,所以localhost指的是设备而不是计算机。我可以通过将“localhost”更改为我的IP地址来实现请

设置:我目前与两名Mac用户在一个组中编码(我正在运行Linux)。我们正在使用React Native制作一个移动应用程序。他们正在一个不适用于Linux的iPhone模拟器上测试该应用程序。我通过将软件包提供给一部物理Android手机来测试这个应用程序。在我尝试向本地服务器发出axios请求之前,这一切都很正常。 在axios请求中,我们输入端点“”。因为我的程序副本运行在移动设备上,所以localhost指的是设备而不是计算机。我可以通过将“localhost”更改为我的IP地址来实现请求

那么比如说,

//Instead of
axios.get('http://localhost:3001/api/point')
    .then(response => doaThing(response));
//I could do
axios.get('http://my.ip.addr:3001/api/point')
    .then(response => doaThing(response));
问题:Axios对我的团队来说运行良好。没有改动对我来说是行不通的。我不想在每次提交之前对代码库进行一系列微小的修改。如果第一个请求找不到服务器,有没有办法告诉axios试试我的IP地址?当前axios在此错误上返回一个“request.status=0”的对象

如果这是一个愚蠢的想法,请告诉我:我试图通过为axios创建一个粗糙的包装器来修复此问题,该包装器将发出调用,检查错误消息,如果状态为0,则再次调用。应返回任何响应

export default axiOS = {
  get: async (endpoint = '', body = {}) => {
    await axios.get(`http://localhost:3001${endpoint}`)
      .then(response => response)
      .catch(async err => {
        //if axios cannot find the server, the status code will be 0
        if (err.request.status === 0) {
          await axios.get(`http://my.ip.addr:3001${endpoint}`)
          .then(response => response)
          .catch(err => console.log("GET Error: ", err))
        } else {
          console.log("GET Error: ", err);
        }
      });
  }, //etc. for put, post, and delete
}
被叫

let response = axiOS.get('/api/time');
这可能会让所有相关人员的生活更轻松,但我似乎无法在返回未定义的值之前解决承诺

tl;dr 所以我的问题至少有两种可能的解决方案

  • 在出现错误时,是否可以让axios路由到辅助地址
  • 我的代码是这个问题的可行解决方案吗?如果是,我可以更改什么以返回对第一个成功请求的响应
  • 有没有第三种解决方案我没有考虑过

  • 如果应用程序应该分发给公众,应用程序应该知道应该联系哪个服务器。现在,在开发中,它是
    localhost
    或本地ip,以后它很可能是一个域。也就是说:在每种情况下,你都需要找到一种方法,用一个url来配置应用程序。我建议您使用
    .env
    文件,并以某种方式将url插入源代码,这样您的源代码只使用配置中的url。通过这种方式,在您的生产应用程序中很容易获得最终url。

    这可能有用,或者可以尝试使用以下模板字符串:
    ${{uu DEV_uuu?(Platfrom.OS=='ios'?'http://localhost' : 'http://x.x.x.x') : 'https://prod.url“}/api/time
    @dotoconnor太完美了。这正是我需要的。这将符合我们的目的。唯一的缺点是,如果我的任何队友在安卓手机上加载应用程序,那么该程序将攻击我的本地服务器,而不是他们的服务器。但我不认为这是个大问题。如果您想将其作为解决方案发布,我可以将其标记为已应答。我很想使用.env文件来配置它,但据我所知,React native并不是用来理解全局变量的。它没有任何可以挂接的构建过程吗?像网页包之类的东西??