Node.js
Как подключить PostgreSQL к Node.js: pg, Pool и первый SELECT
Короткий ответ: установите пакет pg, создайте Pool, передайте параметры подключения к PostgreSQL и выполните первый запрос. Если SELECT NOW() возвращает дату, Node.js успешно подключился к базе
Запросы «как подключить postgresql к node js» и «pg node js postgresql connection» обычно возникают на этапе, когда сервер Express уже запускается, но данные пока лежат не в базе, а в массиве или вообще в голове разработчика. Здесь главное — не прятать подключение в магию: пакет, строка подключения, запрос, обработка ошибки
Установите пакет pg
В папке проекта выполните
npm install pg
Если проекта еще нет, сначала создайте его
mkdir node-postgres-demo
cd node-postgres-demo
npm init -y
npm install pg
Минимальное подключение
Создайте файл db-test.js
const { Pool } = require("pg");
const pool = new Pool({
connectionString: "postgresql://postgres:password@localhost:5432/postgres"
});
async function main() {
const result = await pool.query("SELECT NOW()");
console.log(result.rows[0]);
await pool.end();
}
main().catch((error) => {
console.error("Ошибка подключения к PostgreSQL");
console.error(error);
});
Запустите
node db-test.js
Если подключение работает, вы увидите объект с текущим временем
Где взять строку подключения
Строка подключения обычно выглядит так
postgresql://user:password@host:port/database
Для локальной базы это может быть
postgresql://postgres:password@localhost:5432/my_database
Не вставляйте реальные пароли прямо в код для публичного проекта. Для обучения можно начать так, но затем вынесите параметры в переменные окружения
Подключение через .env
Установите dotenv
npm install dotenv
Создайте .env
DATABASE_URL=postgresql://postgres:password@localhost:5432/my_database
Файл db.js
require("dotenv").config();
const { Pool } = require("pg");
const pool = new Pool({
connectionString: process.env.DATABASE_URL
});
module.exports = pool;
Теперь подключение можно использовать в других файлах
Пример с Express
const express = require("express");
const pool = require("./db");
const app = express();
app.get("/time", async (request, response, next) => {
try {
const result = await pool.query("SELECT NOW()");
response.json(result.rows[0]);
} catch (error) {
next(error);
}
});
app.listen(3000, () => {
console.log("Сервер запущен: http://localhost:3000");
});
Откройте
http://localhost:3000/time
Если видите JSON с временем, Express и PostgreSQL связаны
Почему Pool, а не Client
Client открывает одно подключение. Pool управляет пулом подключений и лучше подходит для веб-приложения, где запросов может быть много. Для первого теста можно использовать Client, но в Express-проекте чаще сразу берут Pool
Мини-практика
Создайте таблицу notes, добавьте одну запись и выведите ее через Express-роут /notes
CREATE TABLE notes (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL
);
INSERT INTO notes (title) VALUES ('Первая заметка');
Запрос в Node.js
const result = await pool.query("SELECT id, title FROM notes ORDER BY id DESC");
Частые ошибки
ECONNREFUSED PostgreSQL не запущен, указан неверный порт или база недоступна
password authentication failed Неверный пользователь или пароль. Проверьте строку подключения
database does not exist Вы подключаетесь к базе, которой нет. Создайте базу или исправьте имя
Забыли pool.end в тестовом скрипте Одноразовый скрипт может не завершаться, если подключение осталось открытым. В сервере Express pool.end() обычно не вызывают после каждого запроса
Что почитать дальше по Node.js
Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:
- Как запустить JS-файл через Node.js: терминал, папка и первый вывод
- Как начать разработку на Node.js: первый проект, файл и запуск
- Как установить npm: вместе с Node.js, проверка версии и первый пакет
- Node.js + MongoDB: первая коллекция из приложения