Настройка : в настоящее время я пишу код в группе с двумя пользователями Mac (я использую Linux).Мы создаем мобильное приложение, используя React Native.Они тестируют приложение на симуляторе iPhone, который недоступен для Linux.Я тестирую приложение, передавая пакет на физический телефон 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');
, который можетсделать жизнь легче навсегдада, но я не могу решить обещание перед возвратом неопределенного значения.
tl; dr Поэтому у моего вопроса есть как минимум два возможных решения
- Можно ли настроить axios для маршрутизации на дополнительный адрес при получении ошибки?
- Является ли мой код возможным решением этой проблемы?Если да, что я могу изменить, чтобы вернуть ответ на первый успешный запрос?
- Возможно, есть третье решение, которое я не рассматривал?