# Первые шаги

В этой серии статей вы узнаете основные принципы работы Nest. Чтобы ознакомиться с основами приложений Nest - мы построим базовое CRUD-приложение с функциями, которые охватывают большое количество возможностей на начальном уровне.

# Язык

Мы влюблены в TypeScript (opens new window), но прежде всего мы любим Node.js (opens new window). Поэтому Nest совместим как с TypeScript, так и с чистым JavaScript. Nest использует последние возможности языка, поэтому для его использования с ванильным JavaScript нам нужен компилятор Babel (opens new window).

В примерах мы будем использовать в основном TypeScript, и вам советуем делать так же. (прим. переводчика - Использовать Nest без Typescript неразумно - фреймворк создан именно с прицелом на TS).

# Предварительные условия

Пожалуйста, убедитесь, что Node.js (opens new window) (>= 10.13.0, кроме v13) установлена на вашей операционной системе.

# Установка

Настроить новый проект довольно просто с помощью Nest CLI. Если установлен npm (opens new window), вы можете создать новый проект Nest с помощью следующих команд в терминале вашей ОС:

$ npm i -g @nestjs/cli
$ nest new project-name

Будет создан каталог project-name, установлены модули node и несколько других шаблонных файлов, а также создан каталог src/, который будет заполнен несколькими основными файлами.

src
app.controller.spec.ts
app.controller.ts
app.module.ts
app.service.ts
main.ts

Вот краткий обзор этих основных файлов:

app.controller.ts Базовый контроллер с одним маршрутом.
app.controller.spec.ts Юнит-тесты для контроллера.
app.module.ts Корневой модуль приложения.
app.service.ts Базовый сервис с единственным методом.
main.ts Входной файл приложения, который использует функцию NestFactory для создания экземпляра приложения Nest.

В main.ts включена асинхронная функция, которая будет инициализировать наше приложение:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Для создания экземпляра приложения Nest мы используем основной класс NestFactory. NestFactory позволяет создать экземпляр приложения. Метод create() возвращает объект приложения, который соответствует интерфейсу INestApplication. Этот объект предоставляет набор методов, которые будут описаны в последующих главах. В приведенном выше примере main.ts мы просто запускаем HTTP-сервер, который позволяет приложению обрабатывать входящие HTTP-запросов.

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

# Платформа

Nest стремится быть платформонезависимым фреймворком. Независимость от платформы позволяет создавать переиспользуемые логические части, которые разработчики могут использовать в различных частях приложения. Технически, Nest может работать с любым Node HTTP фреймворком после создания адаптера. Из коробки поддерживаются два фреймворка HTTP: express (opens new window) и fastify (opens new window). Вы можете выбрать тот, который лучше всего подходит для ваших нужд.

platform-express Express (opens new window) - известный минималистский веб-фреймворк для node. Это проверенная в боях, готовая к продакшену библиотека с большим количеством решений, реализованных сообществом. По умолчанию используется пакет @nestjs/platform-express.
platform-fastify Fastify (opens new window) - это высокопроизводительный фреймворк, ориентированный на обеспечение максимальной эффективности и скорости. Читайте, как его использовать здесь.

Какая бы платформа ни использовалась, она предоставляет свой собственный интерфейс приложения. Они выглядят соответственно как NestExpressApplication и NestFastifyApplication.

Когда вы передаете тип в метод NestFactory.create(), как в примере ниже, объект app будет иметь методы, доступные исключительно для этой конкретной платформы. Однако обратите внимание, что вам не нужно указывать тип если вы не хотите получить доступ к API базовой платформы.

const app = await NestFactory.create<NestExpressApplication>(AppModule);

# Запуск приложения

После завершения процесса установки вы можете выполнить следующую команду в командной строке вашей ОС, чтобы запустить приложение, принимающее входящие HTTP-запросы:

$ npm run start

Эта команда запустит приложение с HTTP-сервером, слушающим порт, определенный в файле src/main.ts. После запуска приложения откройте браузер и перейдите по адресу http://localhost:3000/. Вы должны увидеть сообщение Hello World!.