В этом руководстве вы узнаете, как создать безопасный 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.