Как обработать статические файлы на nestjs?

В NestJS для обработки статических файлов, таких как HTML, CSS, изображения и другие, вы можете использовать модуль Express. NestJS является фреймворком, построенным на основе Express, поэтому можно использовать его возможности напрямую.

Для начала, вам потребуется установить Express и его типы, если они еще не установлены:

npm install express @types/express

Далее, вам нужно создать модуль, который будет обрабатывать статические файлы. Создайте новый файл с именем, например, static.module.ts, и добавьте следующий код:

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { join } from 'path';
import { Express } from 'express';

@Module({})
export class StaticModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // Путь к статическим файлам
    const staticFolderPath = join(__dirname, '../public');
    consumer.apply((req, res, next) => {
      // Проверка, нужно ли обрабатывать этот запрос статическим файлом
      if (req.url.startsWith('/static')) {
        return next();
      }
      // Передать управление Express для обработки запроса
      (req as any).expressApp.use(express.static(staticFolderPath));
      next();
    }).forRoutes('*');
  }
}

Здесь мы определяем модуль StaticModule, который реализует интерфейс NestModule. В методе configure мы настраиваем консьюмера, который будет применяться ко всем маршрутам приложения.

Для каждого запроса, первым делом мы проверяем, начинается ли URL с /static. Если это так, это означает, что запрос уже является статическим файлом, и мы передаем управление следующему обработчику. В противном случае мы используем функцию express.static для обработки запроса и передаем управление следующему обработчику.

Далее, в вашем приложении AppModule вы должны импортировать созданный StaticModule:

import { Module } from '@nestjs/common';
import { StaticModule } from './static.module';

@Module({
  imports: [StaticModule],
})
export class AppModule {}

После этого у вас должна быть настроена обработка статических файлов через Express в NestJS. Разместите свои статические файлы в папке public в корневом каталоге вашего проекта, и они будут доступны по URL-адресу, указанному в правилах пути.

Например, если у вас есть файл styles.css внутри папки public, вы можете получить доступ к нему по URL /styles.css.