и подключение к PostgreSQL.

Это вторая часть многосерийного сериала о экспрессе.

Вы можете найти Часть 1 здесь. В нем рассказывается об основных экспресс-скаффолдингах приложений и настройке мокко для тестирования.

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

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

Мы будем использовать PostgreSQL (самая передовая в мире база данных с открытым исходным кодом!) в качестве базы данных по выбору.

Однако, прежде чем приступить к нашей настройке, нам нужно обновить наш тест и решить, какой ответ мы ожидаем от GET /posts.

Обновить тест и добавить фабрику

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

npm i --save-dev factory-girl

Время обновить наши тесты и настроить фабрики!

mkdir test/factories
touch test/factories/index.js

Добавьте следующий код в factories/index.js

Нам требуется пакет factory-girl, настройте Post factory и экспортируйте его для использования тестировщиком.

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

mkdir test/helpers
touch test/helpers/index.js

Добавьте следующий код в helpers/index.js -

Мы запускаем factories.create('Post') четыре раза. это означает, что мы ожидаем получить ответ, содержащий массив из 4 объектов, каждый с ключами id, title и content для нашего запроса GET /posts.

Обновляем наш тест вот так —

Мы проверяем, что response.body является массивом с 4 объектами в нем, и объект имеет ключи id title и content .

Теперь, когда наши тесты готовы, пора начать с PostgresQL.

Установка PostgreSQL и добавление пользователя

Пожалуйста, скачайте и настройте PostgreSQL в соответствии с вашей ОС. Подтвердите установленную версию клиента с помощью psql --version .

Чтобы создать пользователя PostgreSQL, выполните следующие действия:

  1. Чтобы создать пользователя, введите в терминале следующую команду createuser --interactive --pwprompt.
  2. При появлении запроса Введите имя роли для добавления: введите имя пользователя. Я буду звать своего как demo_user
  3. При появлении запроса Введите пароль для новой роли: введите пароль для пользователя. Я буду использовать пароль как demo_user
  4. При появлении запроса Введите еще раз: введите пароль еще раз.
  5. В ответ на запрос Должна ли новая роль быть суперпользователем? введите y, если вы хотите предоставить доступ суперпользователя. В противном случае введите n. Я выбрал n.
  6. В поле Разрешить ли новой роли создавать базы данных? введите y, если вы хотите разрешить пользователю создавать новые базы данных. В противном случае введите n. Очевидно, я выбрал y.
  7. В поле Разрешить ли новой роли создавать больше новых ролей? введите y, если вы хотите разрешить пользователю создавать новых пользователей. В противном случае введите n. Давайте выберем здесь n.
  8. PostgreSQL создает пользователя с указанными вами настройками.

Теперь мы успешно настроили demo_user для нашей базы данных.

Настройте сиквелиз и сиквелиз-кли

Мы установим следующие пакеты

npm i sequelize pg pg-hstore

Sequelize — это ORM, который помогает нашему экспресс-приложению подключаться к базам данных и упрощает нашу жизнь в целом, связанную с обработкой данных.

pg и pg-hstore — это коннекторы, которые позволяют PostgreSQL и Sequelize взаимодействовать друг с другом.

Мы также установим sequelize-cli, чтобы получить некоторую функциональность продолжения командной строки.

npm i sequelize-cli

Инициализировать

Теперь у нас есть все необходимые пакеты, так что теперь мы можем создать продолжение в нашем проекте.

Во-первых, добавьте конфигурационный файл .sequelizerc , который сообщает сиквелизу, как построить инфраструктуру вокруг нашего проекта.

touch .sequelizerc

Добавьте следующий код

Как видите, мы добавляем четыре пути для продолжения создания папок —

  • config содержит информацию о подключении к базе данных,
  • models держите наши модели,
  • seeders содержат данные, которые мы можем добавить в наши базы данных,
  • и migrations содержат файлы, которые сообщают нам, какие изменения мы внесли в наши базы данных и таблицы в течение курса.

Используйте наш sequelize-cli для автоматического создания этих папок и вставки других шаблонных файлов.

sequelize init

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

Давайте посетим config/config.json, где мы храним информацию о соединении с нашей базой данных, и обновим ее следующим образом.

Мы объявляем два объекта — development и test для двух наших сред разработки. Production будет объявлен аналогично. Для каждого из них мы сообщаем sequenceize об имени пользователя/пароле, имени базы данных, диалекте и отключаем журналы ORM.

В идеале мы должны хранить всю информацию в нашем файле .env и извлекать ее здесь, как мы делаем с нашим PORT в нашем app.js .

Создайте обе базы данных

Чтобы создать базу данных разработки, запустите sequelize db:create

Чтобы создать тестовую базу данных, запустите NODE_ENV=test sequelize db:create

Создать модель

Теперь мы создали базы данных и соединили их с помощью express API с помощью sequenceize, пришло время создать модель.

Sequelize дает нам несколько генераторов, которые помогают создавать часто нужные файлы. Мы будем использовать генератор model:generate для создания нашей первой модели.

sequelize model:generate --name Post --attributes title:string,content:text

Чтобы сопоставить эти изменения с базой данных, мы запустим сгенерированную миграцию.

sequelize db:migrate

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

Подключить модель к контроллеру и отправить ответ

Давайте создадим posts controller. Контроллер «управляет» взаимодействием с базой данных от имени приложения. Это архитектурный выбор, и вы можете свободно реструктурировать свое приложение по своему вкусу.

mkdir src/controllers

touch src/controllers/posts.js

В posts.js мы добавим запрос продолжения для извлечения данных из нашей базы данных и отправки их в качестве ответа.

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

Это хорошо настраивает поток, и приложение должно работать, когда вы запускаете его npm run start и посещаете localhost:3000/posts .

В ответ получаем пустой массив.

Это вполне ожидаемо, потому что мы не добавили никаких пробных данных в нашу базу данных.

Эти пробные данные также называются начальными данными.

Создать семя

Как и model:generate, sequenceize помогает нам генерировать начальные данные с помощью команды seed:generate, которая генерирует для нас шаблонный код.

sequelize seed:generate --name demo-posts

Это создает для нас пустой начальный файл. Давайте заполним его!

И запустите сид, чтобы добавить эти сообщения в нашу базу данных.

sequelize db:seed:all

В нашем app.js мы удостоверяемся, что база данных правильно синхронизирована с моделями. Мы делаем это, используя db.sequelize.sync() .

Если мы запустим наше приложение npm run start и посетим localhost:3000/posts, мы увидим исходные данные!

Заполнить базу данных другим способом

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

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

Давайте добавим index.js в нашу папку seeders.

touch src/models/seeders/index.js

Установить шансы и фейкеры npm i — save-dev chance faker

Обновите наши сидеры/index.js, чтобы создавать несколько постов с использованием обеих библиотек.

Здесь мы используем оба пакета для создания 3 постов каждый. Я показал различные способы использования этих библиотек.

Теперь мы установили его в app.js

Как видите, я проверяю const seed, который передается, когда я запускаю какую-то команду в терминале. Если seed истинно, я очищаю базу данных и запускаю функцию createSeed.

Время добавить команду в package.json скрипты -

“seed”: “node ./src/app.js true”,

Теперь запустите npm run seed в своем терминале, и база данных удалит более ранние семена и добавит новые.

Смотрите ответ в браузере —

Мало того, что мы видим желаемый ответ в браузере, но наш тест также становится зеленым (Ну, он становится зеленым, когда вы подключаете контроллеры, тесты используют фабрики и не требуют начальных данных для запуска)!

В следующей части мы рассмотрим ассоциации между моделями и добавим Автора в Записи.

Вот Часть 3.

Craft Academy — это поставщик технического образования, цель которого – вывести на рынок новые таланты и помочь решить проблему нехватки технических специалистов. Мы исходим из убеждения, что современные стандарты разработки, гибкие методологии и бизнес-навыки имеют основополагающее значение для ИТ-специалистов.

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

Благодаря этой базе наши учащиеся находят работу в различных отраслях или открывают собственный бизнес, выводящий на рынок новые инновации.

Хотите узнать больше о том, чем мы занимаемся? Подпишитесь на нас здесь, в Medium, Facebook, Twitter или посетите наш веб-сайт.