Привет! Представляю вашему вниманию перевод статьи "Full-Stack TypeScript Apps — Part 1: Developing Backend APIs with Nest.js" автора Ana Ribeiro.
Часть 1: Разработка серверного API с помощью Nest.JS
TL;DR: это серия статей о том, как создать веб-приложение TypeScript с использованием Angular и Nest.JS. В первой части мы напишем простой серверный API с помощью Nest.JS. Вторая часть этой серии посвящена интерфейсному приложению с использованием Angular. Вы можете найти окончательный код, разработанный в этой статье в этом репозитории GitHub
Что такое Nest.Js and Why Use It with Angular?
Nest.js это фреймворк для создания серверных веб-приложений Node.js.
Отличительной особенностью является то, что он решает проблему, которую не решает ни один другой фреймоворк: структура проекта node.js. Если вы когда-нибудь разрабатывали под node.js, вы знаете, что можно многое сделать с помомщью одного модуля (например, Express middleware может сделать все, от аутентификации до валидации), что, в конечном итоге, может привести к трудноподдерживаемой "каше". Как вы увидите ниже, nest.js поможет нам в этом, предоставляя классы, которые специализируются на различных проблемах.
Nest.js сильно вдохновлен Angular. Например, обе платформы используют guards для разрешения или предотвращения доступа к некоторым частям ваших приложений и обе платформы предоставляют интерфейс CanActivate для реализации этих guards. Тем не менее, важно отметить, что, несмотря на некоторые сходные концепции, обе структуры независимы друг от друга. То есть, в этой статье, мы создадим независимый API для нашего front-end, который можно будет использовать с любым другим фреймворком (React, Vue.JS и так далее).
Веб-приложение для он-лайн заказов
В этом руководстве мы создадим простое приложение, в котором пользователи смогут делать заказы в ресторане. Оно будет реализовывать такую логику:
- любой пользователь может просматривать меню;
- только авторизованный пользователь может добавлять товар в корзину (делать заказ)
- только администратор может добавлять новые пункты меню.
Для простоты мы не будем взаимодействовать с внешней базой данных и не реализуем функциональность корзины нашего магазина.
Создание файловой структуры проекта Nest.js
Для установки Nest.js нам потребуется установить Node.js (v.8.9.x или выше) и NPM. Node.js для вашей операционной системы скачиваем и устанавливаем с официального сайта (NPM идет в комплекте). Когда все установится проверим версии:
node -v # v12.11.1
npm -v # 6.11.3
Есть разные пути для создания проекта с Nest.js; с ними можно ознакомиться в документации. Мы же воспользуемся nest-cli
. Установим его:
npm i -g @nestjs/cli
Далее создадим наш проект простой командой:
nest new nest-restaurant-api
в процессе работы nest попросит нас выбрать менеджер пакетов: npm
или yarn
Если все прошло удачно, nest
создаст следующую файловую структуру:
nest-restaurant-api
├── src
│ ├── app.controller.spec.ts
│ ├── app.controller.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
├── test
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── .gitignore
├── .prettierrc
├── nest-cli.json
├── package.json
├── package-lock.json
├── README.md
├── tsconfig.build.json
├── tsconfig.json
└── tslint.json
перейдем в созданный каталог и запустим сервер разработки:
# сменим рабочий каталог
cd nest-restaurant-api
# запустим сервер
npm run start:dev
Откроем браузер и введем http://localhost:3000
. На экране увидим:
В рамках этого руководства мы небудем заниматься тестированием нашго API (хотя вы должны писать тесты для любого готового к работе приложения). Таким образом, вы можете очистить каталог test
и удалить файл src/app.controller.spec.ts
(который является тестовым). В итоге наша папка с исходиками содержит следующие файлы:
src/app.controller.ts
иsrc/app.module.ts
: эти файлы отвечают за создание сообщенияHello world
по маршруту/
. Т.к. эта точка входа не важна для этого приложения мы их удаляем. Вскоре вы узнаете более подробно, что такое контроллеры (controllers) и службы (services).src/app.module.ts
: содержит описание класса типа модуль (module), который отвечает за объявление импорта, экспорта контроллеров и провайдеров в приложение nest.js. Каждое приложение имеет по крайней мере один модуль, но вы можете создать более одного модуля для более сложных приложений (подробнее в документации. Наше приложение будет содержать только один модульsrc/main.ts
: это файл, ответственный за запуск сервера.
Примечание: после удаления
src/app.controller.ts
иsrc/app.module.ts
вы не сможете запустить наше приложение. Не волнуйтесь, скоро мы это исправим.
Автор: RokeAlvo