Статьи

Введение в Nest.js для разработчиков Angular

В этом посте мы представим Nest.js для разработчиков Angular. Nest.js особенно интересен для этой группы, так как он был вдохновлен Angular и построен для TypeScript . Так что же такое Nest.js?

Nest.js — это прогрессивная среда Node с открытым исходным кодом, лицензированная MIT, написанная на TypeScript и разделяющая многие концепции с Angular. Он предназначен для серверной части и может использоваться для создания эффективных, надежных и масштабируемых веб-приложений для предприятия. Он построен Камилем Мысливцем .

Nest.js объединяет лучшие концепции объектно-ориентированного программирования , функционального программирования и функционально-реактивного программирования .

Nest.js имеет множество функций, таких как:

  • Расширяемость: благодаря модульной архитектуре Nest позволяет вам использовать другие существующие библиотеки в вашем проекте.
  • Архитектура: Nest имеет архитектуру проекта, которая обеспечивает легкость тестирования, масштабируемость и ремонтопригодность.
  • Универсальность: Nest предоставляет экосистему для создания всех видов серверных приложений.
  • Прогрессивность: Nest использует новейшие функции JavaScript и реализует зрелые решения и шаблоны проектирования в разработке программного обеспечения.

Поскольку он использует TypeScript и базовые концепции Angular, разработчики Angular могут быстро его освоить и смогут создавать серверные части для своих приложений Angular, не прибегая к другим серверным средам.

За кулисами Nest.js использует существующие и зрелые библиотеки, которые разработчики Node.js использовали в течение длительного времени, такие как Express.js и TypeORM.

Express — это быстрая, незавершенная минималистичная веб-инфраструктура для Node.js, которая предоставляет множество утилит HTTP для простого и быстрого создания надежных API REST. Для TypeORM это самый зрелый ORM ( Object Relational Mapper ) для языка TypeScript и современного JavaScript. Он поддерживает шаблоны Active Record и Data Mapper, которые позволяют создавать высококачественные, слабосвязанные, масштабируемые и обслуживаемые приложения поверх самых популярных существующих систем баз данных, таких как MySQL, PostgreSQL и Oracle.

Предпосылки

Чтобы начать работу с Nest.js, вам необходимо выполнить несколько предварительных условий. Поскольку в этом вводном руководстве предполагается, что вы являетесь разработчиком на Angular, возможно, у вас уже есть все они:

  • Node.js и NPM установлены в вашей системе. Вы можете установить их оба с официального сайта или следовать инструкциям по документации вашей системы.
  • Знакомство или опыт работы с TypeScript. Как разработчик Angular, вы уже работали с TypeScript, поскольку Angular основан на TypeScript.

Установка Nest CLI

Nest CLI — это утилита интерфейса командной строки, которая позволяет быстро создавать проекты с базовыми файлами и необходимыми зависимостями. Он также позволяет создавать различные артефакты, такие как компоненты и модули, обслуживая приложение в процессе разработки и создавая окончательное готовое к использованию приложение. CLI Nest основан на пакете Angular Devkit и использует nodemon для отслеживания изменений файлов.

Давайте начнем с установки Nest CLI. Откройте новый терминал и выполните следующую команду:

npm install -g @nestjs/cli 

Обратите внимание, что вам может потребоваться добавить sudo перед вашей командой в системах на основе Debian или macOS или использовать приглашение CMD администратора в Windows. Если вы хотите устанавливать пакеты в вашей системе глобально, не будучи суперпользователем, вам нужно исправить свои разрешения npm .

После установки CLI вы можете использовать его для быстрой генерации проектов Nest.js и работы с ними.

Генерация вашего первого проекта Nest

После установки CLI, давайте создадим первый проект. Вернитесь к своему терминалу и выполните следующую команду:

 nest new firstnestproject 

CLI запросит у вас некоторую информацию о вашем проекте, такую ​​как описание, версия и автор. Вы можете отправить эти данные или просто оставить их пустыми и нажать Enter .

CLI создаст кучу файлов и папок, а затем запросит у вас менеджер пакетов, который вы хотите использовать в своем проекте. Вы можете выбрать npm или yarn, но для целей этого руководства мы продолжим работу с npm.

После успешной установки требуемых зависимостей вы можете перейти в корневую папку вашего проекта и выполнить следующую команду, чтобы запустить сервер динамической перезагрузки на основе nodemon:

 npm run start:dev 

Вы можете использовать свой веб-браузер, чтобы перейти на http://127.0.0.1:3000/ , где слушает ваш сервер Nest. Вы должны увидеть страницу с Hello World! ,

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

Структура проекта

Созданный нами проект Nest.js имеет предопределенную структуру с лучшими практиками для тестируемости, масштабируемости и удобства обслуживания. Давайте посмотрим более подробно.

Это скриншот структуры проекта:

Структура проекта Nest.js

В проекте есть папка node_modules и файл package.json , необходимые для каждого проекта Node.js. Он также имеет:

  • Файл tsconfig.json для настройки TypeScript
  • Файл nodemon.json для конфигурации nodemon
  • Файл tslint.json для печати на языке TypeScript
  • nest-cli.json для конфигурации CLI
  • Папка src/ содержащая фактический код проекта
  • test/ папка, содержащая тесты.

Создание модуля гнезда

Проекты Nest.js имеют модульную архитектуру. Это определение модульного программирования из Википедии :

Модульное программирование — это метод проектирования программного обеспечения, который подчеркивает разделение функциональности программы на независимые, взаимозаменяемые модули , так что каждый содержит все необходимое для выполнения только одного аспекта желаемой функциональности.

В Nest.js вы можете создать модуль как класс TypeScript, аннотированный с @Module() декоратора @Module() , который предоставляет метаданные, которые будут использоваться для организации структуры приложения.

Это изображение с официального сайта Nest.js о том, как модули могут быть структурированы в примере приложения:

Модули Nest.js

Каждое приложение Nest.js имеет как минимум один модуль, называемый корневым модулем.

Вы можете создавать модули с помощью CLI с помощью команды nest generate module . Давайте создадим модуль в нашем проекте. Вернитесь к своему терминалу, убедитесь, что вы перешли в корневую папку проекта и выполните следующую команду:

 nest generate module example 

Это создаст файл src/example/example.module.ts и src/app.module.ts файл src/app.module.ts чтобы включить вновь созданный модуль.

Если мы откроем файл модуля, мы получим следующий контент для базового модуля Nest:

 import { Module } from '@nestjs/common'; @Module({}) export class ExampleModule {} 

Это простой класс TypeScript, украшенный декоратором @Module() доступным из пакета @nestjs/common .

Теперь, если вы откроете основной модуль приложения в файле src/app.module.ts , вы должны увидеть импортированный модуль:

 import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ExampleModule } from './example/example.module'; @Module({ imports: [ExampleModule], controllers: [AppController], providers: [AppService], }) export class AppModule {} 

ExampleModule импортируется из пути ./example/example.module и добавляется в массив imports .

Создание контроллера гнезда

В Nest.js контроллеры используются для обработки входящих HTTP-запросов и возврата ответов. Они сопоставлены с маршрутами.

Вы можете создать контроллер, определив класс TypeScript и используя декоратор @Controller() .

В вашем терминале выполните следующую команду для генерации контроллера:

 nest generate controller example/example 

Мы создали контроллер с именем example и добавили перед именем example/ path префикс, который указывает CLI сделать этот контроллер частью example модуля, который мы создали ранее.

Откройте файл src/example/example/example.controller.ts , вы должны увидеть следующий код:

 import { Controller } from '@nestjs/common'; @Controller('example') export class ExampleController {} 

Если вы откроете файл src/example/example.module.ts , вы увидите, что контроллер импортирован и включен в массив imports модуля example :

 import { Module } from '@nestjs/common'; import { ExampleController } from './example/example.controller'; @Module({ imports: [ExampleModule], controllers: [ExampleController] }) export class ExampleModule {} 

Давайте вернемся к нашему example контроллера и создадим несколько маршрутов. Снова откройте файл src/example/example/example.controller.ts и добавьте следующий импорт:

 import { Get, Post, Body } from '@nestjs/common'; 

Затем добавьте метод index() :

  @Get() index() { return "Example Controller!"; } 

Мы украшаем метод с @Get() декоратора @Get() чтобы создать маршрут, который принимает запросы GET и возвращает ответ с помощью примера контроллера! текст. Мы можем получить доступ к этому маршруту с 127.0.0.1:3000/example URL. Вы должны увидеть пустую страницу с примером контроллера! текст.

Далее, давайте добавим маршрут, который принимает запросы POST. Добавьте следующий метод:

  @Post('echo') echo(@Body() data): any { return data; } 

Мы создаем example/echo маршрут, который получит объект JSON и вернет его обратно. Мы используем декоратор @Body() для извлечения тела из ответа. Используя клиент REST API (cURL или Postman и т. Д.), Вы можете отправить POST-запрос с некоторыми данными на URL-адрес 127.0.0.1:3000/example/echo и получить данные обратно. Вот пример:

Nest.js POST-ответ

Вывод

В этой статье мы представили инфраструктуру Nest.js для разработчиков Angular. Мы также увидели, как установить Nest CLI и использовали его для создания примера проекта и различных артефактов, таких как модули и контроллеры. Для более подробной информации о других концепциях, вы можете прочитать официальные документы .