Настройка Node API с Postgres и Knex
В этой статье я буду настраивать проект Node с базой данных Postgres и построителем запросов Knex.
Что такое кекс
Knex.js — это построитель SQL-запросов «с батарейками» для Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle и Amazon Redshift, разработанный, чтобы быть гибким, портативным и увлекательным в использовании.
Для начала нам нужно инициализировать наш проект, чтобы создать наш package.json
файл.
npm init -y
Настройка базы данных
Я бы использовал онлайн-базу данных под названием Elephantsql для настройки моей базы данных. Вы можете зарегистрироваться здесь.
После регистрации создайте базу данных. Пример показан ниже.
Настройка Кнекса
Установите зависимости, необходимые для проекта
npm i knex -g
npm i pg express dotenv --save
Создать .env
файл в корне вашего проекта и добавьте URL-адрес базы данных. Пример ниже.
DB_URL=URL (where URL is the database connection string)
На вашем терминале запустите команду ниже, чтобы инициализировать knex
knex init
Приведенная выше команда сгенерирует knexfile.js
в корне вашего проекта и будет выглядеть так, как показано ниже.
module.exports = {
development: {
client: 'sqlite3',
connection: {
filename: './dev.sqlite3'
}
},
staging: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
},
production: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
}
};
Я собираюсь изменить knexfile.js
файл конфигурации для использования Postgres
а также указать каталог, в котором должны быть сохранены мои миграции и семена. Изменить knexfile.js
файл с кодом ниже.
require('dotenv').config();
module.exports = {
development: {
client: 'pg',
connection: process.env.DB_URL,
migrations: {
directory: './data/migrations',
},
seeds: { directory: './data/seeds' },
},
testing: {
client: 'pg',
connection: process.env.DB_URL,
migrations: {
directory: './data/migrations',
},
seeds: { directory: './data/seeds' },
},
production: {
client: 'pg',
connection: process.env.DB_URL,
migrations: {
directory: './data/migrations',
},
seeds: { directory: './data/seeds' },
},
};
Конфигурация БД
Создать db.js
файл в data
каталог, в котором будет храниться наша конфигурация knex в каталоге данных. Это будет содержать конфигурацию для наших сред.
Добавьте приведенный ниже код в db.js
файл.
const knex = require('knex');
const knexfile = require('../knexfile');
const env = process.env.NODE_ENV || 'development';
const configOptions = knexfile[env];
module.exports = knex(configOptions);
Миграции
Миграции позволяют вам определять наборы изменений схемы, поэтому обновление базы данных становится проще простого.
Чтобы создать/сгенерировать файл миграции, выполните приведенную ниже команду.
knex migrate:make todo
Примечание:
todo
в приведенной выше команде указано имя миграции.
Приведенная выше команда создаст файл миграции по пути, указанному для миграции. В нашем случае /data/migrations
Затем мы можем отредактировать файл миграции, чтобы включить столбцы, которые нам понадобятся в нашей таблице задач.
exports.up = knex =>
knex.schema.createTable("todo", tbl => {
tbl.increments();
tbl.text("task", 128).notNullable();
});
exports.down = knex => knex.schema.dropTableIfExists("todo");
Чтобы запустить миграцию, вы можете запустить команду ниже
knex migrate:latest
knex migrate:latest
пробежался бы по всем нашим файлам миграции и запустил быup
функции, которые затем создадут таблицы в нашей базе данных.
Чтобы отменить миграцию, вы можете запустить команду ниже
knex migrate:rollback
knex migrate:rollback
пробежался бы по всем нашим файлам миграции и запустил быdown
функции, которые затем удалят таблицы в нашей базе данных.
Семена
Исходные файлы позволяют заполнить вашу базу данных тестовыми или исходными данными независимо от ваших файлов миграции.
Чтобы сгенерировать семена, выполните приведенную ниже команду на своем терминале.
knex seed:make todo
Это создаст todo.js
файл в вашем каталоге семян. указано для семян в нашем knexfile.js
который затем можно отредактировать, включив в него наши тестовые данные.
Пример начального файла ниже.
exports.seed = function(knex) {
return knex('todo').del()
.then(function () {
return knex('todo').insert([
{id: 1, task: 'Create API'},
{id: 2, task: 'Watch Money Heist'},
{id: 3, task: 'Do Dishex'}
]);
});
};
Чтобы запустить файлы семян, мы можем запустить команду ниже на вашем терминале.
knex seed:run
Затем команда запуска получает все файлы начальных значений, а затем передает их в нашу базу данных.
Скрипты
Вы можете добавлять скрипты в package.json
файл.
"scripts": {
"start": "node index",
"migrate": "knex migrate:latest",
"unmigrate": "knex migrate:rollback",
"seed": "knex seed:run "
}
start
: Эта команда запускает наше приложение.migrate
: Эта команда предназначена для добавления наших миграций в нашу базу данных.unmigrate
: Эта команда предназначена для отката/удаления всех существующих миграций из базы данных.
Чтобы запросить базу данных, все, что вам нужно сделать, это импортировать в db.js
файл, который мы создали, и сделайте запрос. Пример показан ниже.
const db = require("./data/db.js");
app.get("/todo", async (req, res) => {
const todos = await db("todo");
res.json({ todos });
});
В этой статье мы смогли рассмотреть настройку Node API с базой данных Postgres и построителем запросов Knex.
Исходный код, использованный при демонстрации этой статьи, можно найти здесь.
Найдите больше информации о knex здесь
Если у вас есть какие-либо вопросы или отзывы, пожалуйста, оставьте комментарий.
Спасибо за чтение.
Эта статья изначально была размещена на моем блог