Приложение Expo go выдает мне ошибку сети AXIOS в симуляторе IOSIOS

Программируем под IOS
Ответить
Anonymous
 Приложение Expo go выдает мне ошибку сети AXIOS в симуляторе IOS

Сообщение Anonymous »

Я использую последнюю версию axios и создал нативное приложение с помощью expo. Пытаюсь запустить его в симуляторе iOS, но он не работает. Это дает мне ошибку сети. Может кто-нибудь помочь? Вот мой код в index.js:

Код: Выделить всё

const corsOptions = {
origin: function (origin, callback) {
return callback(null, true);
},
credentials: true,
};
app.use(cors(corsOptions));
Здесь я использую AXIOS

Код: Выделить всё

import axios from 'axios';
import MUser from './MUser';

const API_KEY = 'test_9088sss';
const BASE_URL = 'https://www.test.com/api';

class APICaller {
static instance = null;

static getInstance() {
if (!APICaller.instance) {
APICaller.instance = new APICaller();
}
return APICaller.instance;
}

constructor() {
this.client = axios.create({
baseURL: BASE_URL,
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'api-key': API_KEY,
},
});

// Axios response interceptor for 401 handling
this.client.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
const status = error.response?.status;

const token = await MUser.getUserToken();

if (token && token.length > 0 && status === 401 && !originalRequest._retry) {
console.warn('⚠️ Access token expired — attempting refresh...');
originalRequest._retry = true;

const refreshed = await this.refreshAccessToken();
if (refreshed) {
console.log('✅ Token refreshed — retrying original request.');
const token = await MUser.getUserToken();
originalRequest.headers['Authorization'] = `Bearer ${token}`;
return this.client(originalRequest);
} else {
console.error('❌ Token refresh failed — logging out.');
await MUser.clearUserSession();
throw new Error('Session expired.  Please log in again.');
}
}
return Promise.reject(error);
}
);

// Axios request interceptor for token attachment and logging
this.client.interceptors.request.use(
async (config) => {
const token = await MUser.getUserToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}

console.log('🔵 Outgoing Request:', {
method: config.method?.toUpperCase(),
url: config.url,
baseURL: config.baseURL,
fullURL: `${config.baseURL}${config.url}`,
hasToken: !!token,
hasBody: !!config.data,
});

return config;
},
(error) => {
console.error('❌ Request Interceptor Error:', error);
return Promise.reject(error);
}
);
}

// Perform request with enhanced error handling
async performCallToEndpoint(endpoint, method = 'GET', body = null) {
try {
console.log('📡 API Request:', {
method,
endpoint,
baseURL: BASE_URL,
fullURL: `${BASE_URL}${endpoint}`,
hasBody: !!body,
});

const response = await this.client.request({
url: endpoint,
method,
data: body,
});

console.log('✅ API Response:', {
endpoint,
status: response.status,
hasData: !!response.data,
});

return this.parseResponse(response.data);
} catch (error) {
// Comprehensive error logging
console.error('❌ API ERROR DETAILS:', {
endpoint,
method,
message: error.message,
code: error.code,
status: error.response?.status,
statusText: error.response?.statusText,
responseData: error.response?.data,
requestURL: error.config?.url,
baseURL: error.config?.baseURL,
fullURL:
error.config?.baseURL && error.config?.url
? `${error.config.baseURL}${error.config.url}`
: 'N/A',
});

// Log specific error types for easier debugging
if (error.code === 'ECONNABORTED') {
console.error('🕐 Request Timeout - Server took too long to respond');
} else if (error.code === 'ENOTFOUND') {
console.error('🌐 DNS Lookup Failed - Host not found.  Check BASE_URL:', BASE_URL);
} else if (error.code === 'ECONNREFUSED') {
console.error('🚫 Connection Refused - Is the server running on', BASE_URL, '?');
} else if (error.code === 'ERR_NETWORK' || error.message === 'Network Error') {
console.error('📡 Network Error - Check connectivity and CORS settings');
} else if (error.response?.status === 404) {
console.error('🔍 Not Found - Endpoint does not exist:', endpoint);
} else if (error.response?.status === 500) {
console.error('💥 Server Error - Internal server error');
} else if (error.response?.status === 403) {
console.error('🔒 Forbidden - Check API key and permissions');
}

const message = error.response?.data?.error || error.message || 'Unknown error';
throw new Error(message);
}
}

// Parse response
parseResponse(data) {
if (data.error) {
throw new Error(data.error);
}
return data.result || data;
}

// Refresh access token
async refreshAccessToken() {
try {
const token = await MUser.getUserToken();
console.log(token);
if (token && token.length > 0) {
const response = await this.client.post('/user/refresh-token');
if (response.status === 200) {
const newToken = response.data?.result?.token;
if (newToken) {
await MUser.setUserToken(newToken);
console.log('🔑 Access token updated successfully.');
return true;
}
}
console.error('❌ Refresh request failed with status', response.status);
return false;
}
} catch (error) {
console.error('❌ Refresh token error:', error.message);
return false;
}
}
}

export default APICaller.getInstance();
Использование axios версии 1.12.2
Может кто-нибудь помочь?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -simulator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»