Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Как NestJS обрабатывает CORS (Cross-Origin Resource Sharing)?

CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет ограничивать доступ к ресурсам веб-приложения из других источников. Это особенно важно для соблюдения безопасности при работе с API, когда ваша серверная часть может находиться на другом домене, чем ваш клиент.

NestJS предоставляет встроенные возможности для настройки CORS. В этой статье мы рассмотрим, как просто и эффективно активировать CORS в приложении NestJS.

Как включить CORS в NestJS

Для того чтобы настроить CORS в приложении NestJS, вы можете воспользоваться следующими шагами:

  • Установка NestJS: Если вы еще не создали проект NestJS, начните с установки CLI NestJS и создания нового проекта.
    npm i -g @nestjs/cli
    nest new my-nest-project
    cd my-nest-project
    
  • Включение CORS: В файле main.ts, который используется для инициализации вашего приложения, вы можете настроить CORS, используя объект конфигурации.
    Вот пример кода:
    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
    
      // Настройка CORS
      app.enableCors({
        origin: 'http://example.com', // Замените на адрес вашего клиента
        methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
        credentials: true, // Разрешить включение учетных данных (например, cookie)
      });
    
      await app.listen(3000);
    }
    bootstrap();
    
  • Объяснение конфигурации CORS

    • origin: Определяет, какие источники могут обращаться к вашему API. Вы можете указать конкретный домен, например, http://example.com, или использовать '*', чтобы разрешить все запросы из всех источников (не рекомендуется на продакшене из соображений безопасности).
    • methods: Определяет, какие HTTP методы разрешены. Вы можете указать несколько методов, разделяя их запятыми. В примере перечислены все стандартные методы.
    • credentials: Указывает браузеру, следует ли включать учетные данные (такие как cookies) в запросы. Если вы устанавливаете этот параметр в true, убедитесь, что ваш сервер настроен для поддержки CORS с учетом учетных данных.

    Использование middleware для дополнительной настройки CORS

    В NestJS также можно использовать middleware для более тонкой настройки CORS. Для этого вы можете создать специальное middleware-настраиваемое поведение.

    import {Injectable, NestMiddleware} from '@nestjs/common';
    
    @Injectable()
    class CustomCorsMiddleware implements NestMiddleware {
        use(req: Request, res: Response, next: Function) {
            res.header('Access-Control-Allow-Origin', 'http://example.com');
            res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
            res.header('Access-Control-Allow-Headers', 'Content-Type');
            next();
        }
    }
    

    Далее вы можете зарегистрировать это middleware в вашем модуле:

    import {Module, MiddlewareConsumer} from '@nestjs/common';
    
    @Module({
        // другие импорты и провайдеры
    })
    export class AppModule {
        configure(consumer: MiddlewareConsumer) {
            consumer
                .apply(CustomCorsMiddleware)
                .forRoutes('*');
        }
    }
    

    Заключение

    Настройка CORS в NestJS очень проста и предоставляет множество опций для настройки в соответствии с вашими требованиями. Правильная конфигурация CORS критически важна для безопасности вашего приложения и предотвращения нежелательного доступа. Надеюсь, что эта статья помогла вам лучше понять, как обрабатывать CORS в ваших проектах на NestJS.