Как правильно отдавать статику с NestJS?

NestJS - это амбициозный фреймворк для создания масштабируемых и эффективных серверных приложений на языке JavaScript/TypeScript. При разработке веб-приложений нередко возникает необходимость отдавать статические файлы, такие как HTML, CSS, изображения или клиентский JavaScript. NestJS предоставляет несколько способов для обслуживания статического контента.

Первый и наиболее простой способ - использование статической директории public в корне вашего проекта. Все содержимое этой директории будет доступно как статический контент по соответствующим путям. Например, если у вас есть файл public/index.html, вы можете получить к нему доступ по адресу http://ваш_хост/index.html. Для этого необходимо использовать встроенный модуль ServeStaticModule, который предоставляется NestJS.

Чтобы настроить обслуживание статического контента, вам потребуется выполнить несколько шагов. Во-первых, установите пакет @nestjs/serve-static с помощью npm или yarn:

npm install @nestjs/serve-static

Во-вторых, импортируйте ServeStaticModule и добавьте его в список импортов вашего модуля приложения:

import { Module } from '@nestjs/common';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'public'),
    }),
  ],
})
export class AppModule {}

В приведенном выше примере мы передаем корневой путь к директории, содержащей наш статический контент. Здесь мы используем функцию join из модуля path, чтобы установить абсолютный путь, относительно public директории. Это позволит нам легко управлять путями, независимо от места выполнения кода.

После этого вы можете обращаться к файлам в директории public, как описано выше, по правильному пути.

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

Таким образом, NestJS предоставляет простой и удобный способ обслуживания статического контента, что делает его отличным выбором для разработки веб-приложений, требующих использования такого контента.