В этом руководстве вы узнаете, как создать безопасный API с помощью NestJS, модульной архитектуры для Node.js, основанной на TypeScript.
NestJS помогает разработчикам создавать высокомасштабируемые, модульные и обслуживаемые серверные веб-приложения. Он использует платформу Express для простой реализации шаблона MVC (модель-представление-контроллер) и обеспечения расширяемости, поскольку вы можете использовать любые сторонние модули, доступные для Express. Однако наиболее выдающейся особенностью NestJS является его встроенная поддержка TypeScript, которая позволяет вам получить доступ к дополнительной статической проверке типов вместе с мощными инструментами для больших приложений и новейшими функциями ECMAScript.
Что ты будешь строить
В этом руководстве вы создадите полнофункциональный API, который позволит клиентам выполнять операции с данными над ресурсами, описывающими меню ресторана.
Загляните в Блог Auth0 🔐 и найдите все, что вам нужно знать об инфраструктуре идентификации, управлении доступом, SSO, аутентификации JWT и последних новостях по JavaScript. 👉 AUTH0 БЛОГ 👈
Вы будете использовать рабочий клиент под названием WHATABYTE Dashboard, чтобы использовать, тестировать и даже пытаться взломать API!
Эта панель управления вдохновлена элегантным веб-плеером от Spotify.
Доступ к API будет ограничен следующими бизнес-правилами:
- Кто угодно может читать данные: читать пункты меню.
- Только пользователи с ролью
menu-admin
имеют право записывать данные: создавать, обновлять или удалять пункты меню.
Для простоты на этом этапе руководства вы будете хранить данные в памяти, а не во внешней базе данных.
Начало работы с NestJS
NestJS требует для работы Node.js и NPM. Проверьте, установлены ли они, выполнив следующие команды в вашем терминале:
Если вам необходимо установить какой-либо из них, следуйте инструкциям, предоставленным Node.js Foundation для вашей операционной системы. Это руководство было протестировано с использованием Node.js v10.16.3
и NPM v6.9.0
.
NestJS предлагает мощный инструмент командной строки для создания и построения вашего приложения. Чтобы сгенерировать новый проект, используйте npx
для запуска NestJS CLI, не устанавливая его глобально в вашей системе:
npx @nestjs/cli new nest-restaurant-api
Команда
npx
доступна в версияхnpm v5.2.0
и выше.
Интерфейс командной строки попросит вас выбрать диспетчер пакетов npm
или yarn
и приступить к установке зависимостей проекта, используя ваш выбор. Чтобы следовать этому руководству, выберите npm
.
По завершении установки вы получите каталог с именем nest-restaurant-api
. Перейдите в этот каталог:
# move into the project directory cd nest-restaurant-api
Очистка стартового проекта NestJS
Для простоты в этом руководстве вы не будете писать тесты. Однако вам следует писать надежные тесты для любого готового к работе приложения. Таким образом, удалите каталог test
и файл src/app.controller.spec.ts
из вашего проекта:
rm -rf test/ rm src/app.controller.spec.ts
См. Документацию по тестированию NestJS для получения подробной информации о том, как выполнять автоматические тесты.
После этого удалите файлы, определяющие AppController
и AppService
:
rm src/app.controller.ts src/app.service.ts
Удаление этих файлов приводит к прерыванию AppModule
, так как это зависит от AppController
и AppService
. Чтобы исправить это, откройте свой проект в предпочитаемой IDE и обновите src/app.module.ts
следующим образом:
// src/app.module.ts import { Module } from '@nestjs/common'; @Module({ imports: [], controllers: [], providers: [], }) export class AppModule {}
Использование переменных среды
src/main.ts
- это точка входа в ваше приложение; однако этот файл имеет жестко заданные зависимости конфигурации, которые делают ваше приложение менее гибким и адаптируемым к различным средам развертывания.
Откройте src/main.ts
и обратите внимание, что приложение настроено для прослушивания входящих запросов на жестко заданном номере порта, 3000
:
await app.listen(3000);
Чтобы исправить эту жесткость конфигурации, вы будете использовать переменные среды, чтобы предоставить вашему приложению значения конфигурации, такие как process.env.PORT
, вместо жестко заданных значений.
Для начала установите dotenv
в свой проект:
npm i dotenv
это модуль с нулевой зависимостью, который загружает переменные среды из файла .env
в глобальную переменную process.env
.
Создайте этот скрытый файл в корневом каталоге проекта следующим образом:
Откройте .env
и заполните его следующей переменной:
Переменные конфигурации, хранящиеся в .env
, можно присоединить к process.env
, вызвав метод dotenv.config()
. Таким образом, обновите src/main.ts
, чтобы вызвать этот метод прямо под импортом модуля, и замените жестко запрограммированный номер порта на process.env.PORT
:
// src/main.ts import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import * as dotenv from 'dotenv'; dotenv.config(); async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(process.env.PORT); } bootstrap();
Теперь каждый раз, когда вы запускаете свое приложение, оно будет прослушивать запросы на порт 7000
- или любое другое значение process.env.PORT
. Это позволяет настраивать ваше приложение извне с помощью сервисов развертывания, таких как AWS или Heroku.
Осторожно! Ваш
.env
файл со временем может содержать конфиденциальную информацию, такую как ключи API или секреты. Поэтому очень важно добавить его в свой.gitignore
файл, чтобы предотвратить его передачу в систему контроля версий, напримерgit
.
Локальная установка NestJS CLI
Теперь, когда проект очищен и настроен, вы будете использовать NestJS CLI локально в качестве зависимости разработки, чтобы легко создавать архитектурные элементы вашего приложения. Выполните следующую команду, чтобы установить его:
npm install --save-dev @nestjs/cli
Очень важно передать --save-dev
флаг npm
, чтобы гарантировать, что пакет установлен локально для целей разработки и тестирования и не включен в производственный пакет вашего приложения.
Контрольно-пропускной пункт
Как и в случае с видеоиграми, во время работы над программным проектом важно сохранять прогресс. Хотя IDE и текстовые редакторы могут предлагать возможность отката различных версий файла проекта, рекомендуется использовать контроль версий в качестве «контрольной точки».
Создайте пустой репозиторий Git для вашего проекта следующим образом:
Добавьте файлы текущего проекта в репозиторий, игнорируя все файлы, перечисленные в .gitignore
:
Наконец, зафиксируйте пакет файлов следующим образом:
git commit -m "Set up foundation of NestJS app"
Я готов начать создавать свое приложение NestJS Я столкнулся с проблемой
Первоначально опубликовано на https://auth0.com.