Чтобы решить проблему с CORS в вашем приложении NestJS, нужно настроить middleware для обработки CORS.

Чтобы решить проблему с CORS в вашем приложении NestJS, нужно настроить middleware для обработки CORS. Вот как можно это сделать в вашем коде:


Обновленный код с настройкой CORS

typescript

import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // Включение CORS
  app.enableCors({
    origin: 'http://localhost:3001', // Разрешить запросы только с этого домена
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // Разрешенные методы
    credentials: true, // Если нужно передавать куки
  });

  // Настройка Swagger
  const config = new DocumentBuilder()
    .setTitle('Documents API')
    .setDescription('API для работы с документами')
    .setVersion('1.0')
    .addTag('documents')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();


Что изменено:

  1. Добавлено app.enableCors:
    • Метод enableCors включает поддержку CORS в приложении.
    • Параметр origin указывает, с каких доменов разрешены запросы. В данном случае разрешены запросы с http://localhost:3001.
    • Параметр methods определяет, какие HTTP-методы разрешены.
    • Параметр credentials разрешает передачу куки и других учетных данных.
  2. Swagger остался без изменений:
    • Swagger используется для документирования API и не влияет на CORS.

Пример запроса

После включения CORS, запросы с http://localhost:3001 к вашему серверу на http://127.0.0.1:3000 больше не будут блокироваться.Пример GET-запроса:

javascript

fetch('http://127.0.0.1:3000/documents?name=ment&typeId=5', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
  },
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error('Ошибка:', error));


Рекомендации:

  1. Для разработки:
    • Разрешите запросы с любого домена, используя origin: '*'. Это удобно для тестирования, но не рекомендуется для продакшена.
    typescriptapp.enableCors({ origin: '*', });
  2. Для продакшена:
    • Ограничьте доступ только к доверенным доменам.
    • Убедитесь, что сервер возвращает правильные заголовки CORS.
  3. Проверка CORS:
    • Если проблема сохраняется, убедитесь, что ваш браузер не кэширует старые заголовки. Очистите кэш или используйте режим инкогнито.