gpt4 book ai didi

javascript - react native : Redirecting axios to a different address upon error

转载 作者:行者123 更新时间:2023-11-30 06:21:21 26 4
gpt4 key购买 nike

设置:我目前正在和两个 Mac 用户(我运行的是 Linux)一起编写代码。我们正在使用 React Native 制作一个移动应用程序。他们正在 Linux 不可用的 iPhone 模拟器上测试该应用程序。我通过将包提供给物理 Android 手机来测试应用程序。这工作正常,直到我尝试向本地服务器发出 axios 请求。在 axios 请求中,我们输入端点“http://localhost:3001/whatever”。由于我的程序副本在移动设备上运行,因此 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');

这可以让所有相关人员的生活更轻松,但我似乎无法在返回未定义的值之前解决 promise 。

长话短说所以我的问题至少有两种可能的解决方案

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

最佳答案

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

关于javascript - react native : Redirecting axios to a different address upon error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com