Пользовательский интерфейс NestJS Swagger загружается на реальном устройстве Android, но «Попробуйте» не работает с CORSAndroid

Форум для тех, кто программирует под Android
Anonymous
Пользовательский интерфейс NestJS Swagger загружается на реальном устройстве Android, но «Попробуйте» не работает с CORS

Сообщение Anonymous »

Я разрабатываю серверную часть NestJS и тестирую ее на реальном устройстве Android.
Настройка:
  • IP-адрес серверной части: 192.168.1.5:3000 (MacBook)
  • Устройство: реальный телефон Android, подключенный к той же сети Wi-Fi.
  • Наблюдение: я могу успешно открыть документацию Swagger в браузере телефона по адресу http://192.168.1.5:3000/api/docs.
Проблема: Когда я нажимаю «Попробовать» для любой конечной точки (например, /auth/login) внутри пользовательского интерфейса Swagger на телефоне, запрос завершается со следующим сообщением:

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

TypeError: Failed to fetch
Возможные причины: CORS, сбой сети или схема URL-адреса должна быть http или https.

Он отлично работает на эмуляторе Android с использованием http://10.0.2.2:3000.
Текущая конфигурация main.ts CORS:

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

app.enableCors({
origin: ['http://localhost:5175'], // My Vite frontend
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
});

await app.listen(3000, '0.0.0.0');

2. Возврат подклассов
Конструктор фабрики может решить, какую конкретную реализацию вернуть, на основе предоставленных аргументов. Это часто используется в Фабрике шаблонов.

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

app.enableCors({
origin: ['http://localhost:5175'], // My Vite frontend
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
});

await app.listen(3000, '0.0.0.0');
Текущая конфигурация Swagger:

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

const swaggerConfig = new DocumentBuilder()
.setTitle('Liaison360 API')
.addServer('http://localhost:3000', 'Local Development')
.addServer('http://192.168.1.5:3000', 'Local Network')
.build();

What I've tried:
  • Проверено, что телефон и ноутбук находятся в одной сети.
  • Проверено, что серверная часть прослушивает 0.0.0.0.
  • Поскольку HTML-страница Swagger загружается, я знаю, что порт не заблокирован брандмауэром.
Почему браузер позволяет загружать страницу Swagger, но блокирует фактические запросы на выборку API, и как мне настроить CORS в NestJS, чтобы разрешить это тестирование?

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