Вопросы по Nest.js

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

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

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

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

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

  1. Установка NestJS: Если вы еще не создали проект NestJS, начните с установки CLI NestJS и создания нового проекта.
    npm i -g @nestjs/cli
    nest new my-nest-project
    cd my-nest-project
    
  2. Включение 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.