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. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x