Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Создание проекта

Проект 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.