Создание проекта
Проект NestJS создаёт консольная утилита Nest CLI. Она готовит папки, настройки TypeScript, тесты и первый работающий маршрут, так что сервер запускается через минуту после установки.
Установка CLI и новый проект
npm i -g @nestjs/cli
nest new blog
cd blog
npm run start:devКоманда nest new спросит, каким менеджером пакетов пользоваться, — выберите npm. Команда npm run start:dev запускает сервер в режиме наблюдения: после каждого сохранения файла он перезапускается сам. Откройте http://localhost:3000 — появится текст Hello World!.
Что внутри
blog/
├── src/
│ ├── app.controller.ts
│ ├── app.controller.spec.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
├── test/
├── nest-cli.json
├── package.json
└── tsconfig.json| Файл | Назначение |
|---|---|
src/main.ts | Точка входа: создаёт приложение и запускает сервер |
src/app.module.ts | Корневой модуль, к нему подключаются все остальные |
src/app.controller.ts | Пример контроллера с маршрутом GET / |
src/app.service.ts | Пример сервиса, который возвращает Hello World! |
*.spec.ts | Модульные тесты |
test/ | Сквозные (e2e) тесты |
Точка входа
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();NestFactory.create() собирает приложение из корневого модуля, а listen() запускает сервер на порту из переменной окружения PORT или на 3000. Этот файл почти не меняется: сюда добавляют только глобальные настройки.
Декораторы
Откройте src/app.module.ts:
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}@Module(...) — декоратор. Это функция, которая вызывается со знаком @ перед классом, методом, свойством или параметром и прикрепляет к нему дополнительные сведения. Сам класс AppModule пустой, а декоратор сообщает NestJS: «это модуль, вот его контроллеры и сервисы». Декораторы — возможность TypeScript, в обычном JavaScript их пока нет.
Фреймворк читает эти сведения при запуске и по ним собирает приложение. Поэтому почти весь код NestJS — классы с декораторами.
Скрипты
| Команда | Что делает |
|---|---|
npm run start:dev | Запуск с перезапуском при изменениях |
npm run build | Компиляция TypeScript в папку dist/ |
npm run start:prod | Запуск собранного кода из dist/ |
npm run test | Модульные тесты |
Частая ошибка
Если запустить сервер командой npm run start, он не увидит ваших изменений: этот скрипт компилирует код один раз. При разработке всегда используйте npm run start:dev. А если порт 3000 уже занят другим процессом, сервер упадёт с ошибкой EADDRINUSE — остановите старый процесс или задайте другой порт в переменной PORT.