Предисловие

Исходя из Laravel, который имеет множество встроенных функций, я начал возмущаться переходом на NodeJS. Я не имел в виду настройку обработки ошибок, ведения журнала, внедрения зависимостей и т. Д. К счастью, я нашел NestJS с его нестандартной архитектурой и отличной документацией, и я снова почувствовал себя как дома.

Это одно небольшое путешествие в длинном списке технических приключений с NestJS.

SequelizeJS - это ORM, который предлагает подключение к реляционным базам данных, таким как MySQL, PostgreSQL и MSSQL. В этой статье я собираюсь использовать MySQL, размещенный на RemoteMySQL, но вы можете использовать любую реляционную базу данных, которая вам нравится.

Начиная

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

npm install --save sequelize sequelize-typescript mysql2
npm install --save-dev @types/sequelize

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

nest generate module database
nest generate provider database/database.providers

Здесь мы добавим наши модели сущностей в SequelizeJS. Я добавляю модели прямо сейчас (хотя они еще созданы), но вы можете сделать это позже.

Я импортировал и добавил модель user в функцию addModels. Теперь экспортируйте поставщика базы данных, чтобы его можно было использовать с любым модулем, которому требуется доступ к базе данных через SequelizeJS.

Модель сущности пользователя

Я не собираюсь объяснять, как приведенный выше код заполняет таблицу базы данных и ее атрибуты. Если вам интересно узнать больше о SequelizeJS, вы можете заглянуть здесь.

Затем мы создадим user.provider.ts, который будет использоваться для экспорта модели User, чтобы ее можно было использовать в различных сервисах.

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

На этом мы закончили с нашей базой данных и конфигурацией SequelizeJS. Теперь нужно просто импортировать базу данных и ее модели и использовать их 😀.

Вперед с Кодексом

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

nest generate module user
nest generate controller user
nest generate service user 

Это файлы, отвечающие за обработку повторяющихся запросов к базе данных. Но сначала мы создадим объект передачи данных (DTO), это особенно полезно для проверки тела входящего HTTP-запроса или создания документации API с помощью swagger и т. Д.

Пользовательский модуль

Приведенный выше код объединяет весь код пользователя (контроллер, службу, модель) в одном месте, в пользовательском модуле, чтобы его можно было экспортировать в модуль приложения.

Обратите внимание, что пользовательские controller и service были сгенерированы, но на этом этапе они пусты. Вы можете заполнить этот файл позже.

Служба пользователя

В отличие от пользовательского сервиса, который использует декоратор «Injectable», user provider, который мы создали для использования User Model, является не является частью NestJS, поэтому его нужно вводить вручную.

Мы делаем это внутри метода constructor службы с помощью декоратора «Inject».

Пользовательский контроллер

Последний шаг - внедрить пользовательскую службу в наш пользовательский контроллер. Контроллер предоставляет нашу базу кода доступным извне конечным точкам API.

Структура папки

Если вам интересно, вот как выглядит моя структура папок.

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

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

В папке dto содержатся «объекты передачи данных» для каждого запроса. Файл index используется для экспорта всех dto-.