и подключение к 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, выполните следующие действия:
- Чтобы создать пользователя, введите в терминале следующую команду
createuser --interactive --pwprompt
. - При появлении запроса Введите имя роли для добавления: введите имя пользователя. Я буду звать своего как
demo_user
- При появлении запроса Введите пароль для новой роли: введите пароль для пользователя. Я буду использовать пароль как
demo_user
- При появлении запроса Введите еще раз: введите пароль еще раз.
- В ответ на запрос Должна ли новая роль быть суперпользователем? введите y, если вы хотите предоставить доступ суперпользователя. В противном случае введите n. Я выбрал n.
- В поле Разрешить ли новой роли создавать базы данных? введите y, если вы хотите разрешить пользователю создавать новые базы данных. В противном случае введите n. Очевидно, я выбрал y.
- В поле Разрешить ли новой роли создавать больше новых ролей? введите y, если вы хотите разрешить пользователю создавать новых пользователей. В противном случае введите n. Давайте выберем здесь n.
- 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 или посетите наш веб-сайт.