
Как подключить экспресс -приложение к Postgres, используя Scilezize
22 июня 2025 г.Введение
PostgreSQL (сокращен как Postgres) является одной из наиболее часто используемых баз данных в программных приложениях для создания. Postgres-это система управления базами данных с открытым исходным кодом (RDBMS). Одним из преимуществ использования Postgres является его поддержка как реляционных, так и нереляционных (NOSQL) запросов.
Одним из способов подключения базы данных к веб -приложению является использование ORM (Object Relational Mapper). ORM действует как уровень связи между вашим приложением и базой данных. Цель этого учебника - объяснить, как вы можете использовать Postgres в своем Express Application с помощью ORM Sedize.
ORM -продолжение описывается как:
Современный TypeScript и Node.js Orm для Oracle, Postgres, MySQL, MariaDB, SQLite и SQL Server и многое другое. -Продолжение документации
Вы создадите простой API управления задачами. API сможет создавать, перечислять, обновлять статус завершения и удалять задачи.
This tutorial is the first in an upcoming series of tutorials focused on using relational databases in Express using Sequelize. In the upcoming tutorials, you’ll explore database seeding, migrations, and associations in Sequelize.
Предварительные условия
Чтобы приступить к этому уроку, вам понадобится следующее:
- Текстовый редактор (например, VS Code)
- Клиент API для тестирования конечных точек (например, почтальон)
- Node.js установлен на вашем компьютере
- Основное знание экспресса
- Экземпляр Postgres, работающих локально или удаленно
Настройка проекта
Мы начнем с настройки соответствующих файлов и каталогов для создания приложения Express и установки необходимых пакетов. Используемые команды применимы только к терминалу Linux.
Создайте каталог проектов:
mkdir tasks-manager-api
Перейдите к каталогу проекта:
cd tasks-manager-api
Инициализируйте пакет NPM, выполнив следующую команду для создания
package.json
Файл с настройками по умолчанию:npm init -y
Установить экспресс и другие основные зависимости:
npm install express express-async-errors dotenv && npm install nodemon --save-dev
Установите драйвер Postgres для node.js:
npm install pg
Установить продолжение:
npm install sequelize
В корневом каталоге создайте
models
иutils
Папки:mkdir models utils
В корневом каталоге создайте
.env
Файл, который будет содержать номер порта сервера и URL -адрес базы данных любого экземпляра Postgres:PORT=5000 DATABASE_URL=postgres://<user>:<password>@<host>:<port>/<database>
В корневом каталоге создайте
index.js
Файл, который является точкой записи приложения:touch index.js
Настройка команды для запуска локального сервера разработки, редактируя
scripts
объект вpackage.json
:{ //… "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon index.js", "start": "node index.js" }, //… }
Структура папки проекта должна выглядеть так:
Настройка продолжения
Создайте два файла вutils
каталог:config.js
иdb.js.
Загрузка переменных среды
Вconfig.js
файл, загрузите переменные среды из.env
Файл с использованиемdotenv
упаковка. Затем экспортироватьPORT
иDATABASE_URL
переменные, чтобы их можно было получить в других частях приложения.
Аconfig.js
Файл должен иметь следующее содержимое:
require('dotenv').config()
const PORT = process.env.PORT || 3000
const DATABASE_URL = process.env.DATABASE_URL
module.exports = {
PORT,
DATABASE_URL
}
Создание экземпляра Scentize
Вdb.js
Файл, создайте экземпляр продолжения. Вы можете создать экземпляр продолжения, передавая URI подключения базы данных (сохраненный вDATABASE_URL
) к продолжению конструктора. Затем вы создаете функциюconnectToDB,
это проверит соединение с базой данных, вызываяauthenticate
функция Наконец, вы экспортируетеconnectToDB
функция и экземпляр продолжения.
Аutils/db.js
Файл должен иметь следующее содержимое:
const Sequelize = require("sequelize");
const { DATABASE_URL } = require("./config");
const sequelize = new Sequelize(DATABASE_URL)
const connectToDB = async () => {
try {
await sequelize.authenticate()
console.log("Database connection established successfully.")
} catch (error) {
console.log("Unable to connect to the database:", error)
return process.exit(1)
}
return null
}
module.exports = {
connectToDB,
sequelize
}
Определение модели задачи
Модель продолжения - это представление таблицы в базе данных. Вы можете определитьTask
модели, расширяя продолжениеModel
класс и вызовModel.init(attributes, options)
функция
Вmodels
каталог, создайтеtask.js
Файл со следующим содержанием:
const {Model, DataTypes} = require("sequelize")
const {sequelize} = require("../utils/db")
class Task extends Model {}
Task.init({
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
title: {
type: DataTypes.STRING,
allowNull: false
},
completed: {
type: DataTypes.BOOLEAN,
defaultValue: false
}
}, {
sequelize,
modelName: "Task",
timestamps: true,
underscored: true,
defaultScope: {
attributes: {
exclude: ["createdAt", "updatedAt"]
}
}
})
Task.sync()
module.exports = Task
Аattributes
параметр определяет структуруTask
Таблица в базе данных. АTask
Модель имеет три атрибута:
id
: Целочисленное поле, которое представляет собой автоматический усиливающий первичный ключ, используемый для уникальной идентификации каждой записи.title
: Поле строки, которое представляет имя задачи.completed
:completed
Поле имеет логическое значение, которое указывает, была ли задача выполнена.
Аoptions
Параметр конфигурирует, как продолжение обрабатывает модель. АTask
Модель имеет следующие параметры:
sequelize
: Спокойный экземпляр, созданный ранее вutils/db.js
ПолемmodelName
: Имя таблицы, созданного в базе данных.timestamps
: Когда установленоtrue
, добавляетcreatedAt
иupdatedAt
Поля автоматически к модели.underscored
: Когда установленоtrue
, преобразует поля корпуса верблюда в корпус змеи в базе данных.defaultScope
: Исключает определенные атрибуты по умолчанию при запросе.
АTask.sync()
Функция синхронизирует модель с базой данных, создавая таблицу, если таблица не существует. Тем не менее, вы должны отметить, что синхронизация должна выполняться с использованием миграций.
Создание сервера Express
Наконец, вы собираете все это вместе, создав Express Server. Вindex.js
Файл, вы настраиваете необходимое промежуточное программное обеспечение, определяете маршруты конечной точки API и запускаете сервер Express.
Аstart
Функция отвечает за инициализацию сервера Express. Аstart
Функция сначала проверяет соединение с базой данных, вызываяconnectToDB()
функция Если подключение успешно, оно запускает Express Server, который прослушивает указанный порт.
Аindex.js
Файл имеет следующее содержимое:
require("express-async-errors");
const express = require("express");
const app = express();
const { PORT } = require("./utils/config");
const { connectToDB } = require("./utils/db");
const Task = require("./models/task");
// middlewares
app.use(express.json());
// routes
app.get("/api/tasks", async (req, res) => {
const tasks = await Task.findAll();
res.json({
message: "List of tasks",
tasks: tasks,
});
});
app.post("/api/tasks", async (req, res) => {
const { title } = req.body;
const task = await Task.create({ title });
res.status(201).json({
message: "Task created successfully",
task,
});
});
app.patch("/api/tasks/:id/toggle-completed", async (req, res) => {
const { id } = req.params;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ message: "Task not found" });
}
task.completed = !task.completed;
await task.save();
res.json({
message: task.completed
? "Task marked as completed"
: "Task marked as not completed",
task,
});
});
app.delete("/api/tasks/:id", async (req, res) => {
const { id } = req.params;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ message: "Task not found" });
}
await task.destroy();
res.json({
message: "Task deleted successfully",
});
});
const start = async () => {
try {
await connectToDB();
app.listen(PORT, console.log(`Server is running on port ${PORT}`));
} catch (error) {
console.error(error);
process.exit(1);
}
};
start();
Тестирование конечной точки API
Теперь вы можете приступить к проверке конечных точек API:
- Создайте новую задачу -
POST /api/tasks
:
- Перечислите все задачи -
GET /api/tasks
:
- Статус завершения переключения -
PATCH /api/tasks/:id/toggle-completed
:
- Удалить задачу -
DELETE /api/task
:
Заключение
Теперь вы знаете, как подключить экспресс -приложение к базе данных Postgres, используя Secutize. Вы создали простой API диспетчера задач, и в процессе вы настроили продолжение, подключенные к экземпляру Postgres, определилиTask
модель и создал конечные точки API.
В настоящее время логика контроллера написана вindex.js
Файл для простоты. В предстоящих учебных пособиях мы рефактируем эту кодовую базу в более масштабируемую структуру, используя контроллеры, маршрутизаторы и миграции продолжения.
Для дальнейшего чтения вам следует пройти черезПродолжение документацииЧтобы узнать больше о модельных запросах, проверке, ассоциациях и многом другом.
Вы можете найти полный исходный код для этого учебника наGitHubПолем
Ресурсы
- Продолжение документации (V6)
- Что такое postgresql? - AWS
- Использование реляционных баз данных с Scentize - Fullstackopen
- Express.js документация
Оригинал