Введение в работу с базами данных в JavaScript (Node.js)
Современная веб-разработка редко обходится без взаимодействия с базами данных. Будь то хранение пользователей, постов блога или данных для аналитики — умение работать с базами данных (БД) — обязательный навык для каждого разработчика. В этой статье мы рассмотрим два самых популярных типа баз данных: реляционную PostgreSQL и документо-ориентированную MongoDB. Мы напишем простые примеры на JavaScript (Node.js), которые помогут вам начать работу с обеими системами.
1. Подготовка окружения и установка зависимостей
Прежде чем писать код, необходимо установить драйверы для взаимодействия Node.js с выбранными базами данных. Для этого создайте новый проект и выполните установку пакетов через npm.
Установка драйверов
- pg — популярный клиент для PostgreSQL.
- mongoose — ODM (Object Document Mapper) для MongoDB, упрощающий работу с коллекциями.
mkdir db-example && cd db-example
npm init -y
npm install pg mongoose
Теперь ваше окружение готово к экспериментам.
2. Работа с PostgreSQL из Node.js
PostgreSQL — это мощная реляционная база данных, которая использует SQL для запросов. Мы подключимся к локальному серверу, создадим таблицу и выполним базовые операции CRUD (Create, Read, Update, Delete).
Подключение к базе данных
Создайте файл postgres.js и добавьте следующий код для подключения:
const { Pool } = require('pg');
const pool = new Pool({
user: 'your_username',
host: 'localhost',
database: 'testdb',
password: 'your_password',
port: 5432,
});
async function connect() {
try {
const client = await pool.connect();
console.log('Подключено к PostgreSQL');
client.release();
} catch (err) {
console.error('Ошибка подключения:', err);
}
}
connect();
Создание таблицы и вставка данных
Теперь добавим функцию для создания таблицы users и вставки записей:
async function createTable() {
const query = `
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
`;
await pool.query(query);
console.log('Таблица users создана');
}
async function insertUser(name, email) {
const query = 'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *';
const values = [name, email];
const res = await pool.query(query, values);
console.log('Добавлен пользователь:', res.rows[0]);
}
// Пример использования
createTable().then(() => insertUser('Иван', 'ivan@example.com'));
Чтение и обновление данных
Получим всех пользователей и обновим email:
async function getUsers() {
const res = await pool.query('SELECT * FROM users');
console.log('Все пользователи:', res.rows);
}
async function updateUserEmail(id, newEmail) {
const query = 'UPDATE users SET email = $1 WHERE id = $2 RETURNING *';
const res = await pool.query(query, [newEmail, id]);
console.log('Обновлен пользователь:', res.rows[0]);
}
getUsers().then(() => updateUserEmail(1, 'ivan_new@example.com'));
PostgreSQL отлично подходит для проектов, где важна целостность данных и сложные связи между таблицами.
3. Работа с MongoDB из Node.js
MongoDB — это NoSQL база данных, которая хранит данные в формате, похожем на JSON (BSON). Она гибкая и не требует строгой схемы. Для работы мы будем использовать Mongoose.
Подключение к MongoDB
Создайте файл mongo.js:
const mongoose = require('mongoose');
const connectDB = async () => {
try {
await mongoose.connect('mongodb://localhost:27017/testdb', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('Подключено к MongoDB');
} catch (err) {
console.error('Ошибка подключения:', err);
}
};
connectDB();
Создание схемы и модели
В отличие от PostgreSQL, в MongoDB мы сначала определяем схему (структуру документа) и модель:
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
CRUD операции с Mongoose
Добавим функции для создания, чтения и обновления документов:
// Создание
async function createUser(name, email) {
const user = new User({ name, email });
const savedUser = await user.save();
console.log('Создан пользователь:', savedUser);
}
// Чтение
async function getUsers() {
const users = await User.find();
console.log('Все пользователи:', users);
}
// Обновление
async function updateUser(id, newName) {
const updatedUser = await User.findByIdAndUpdate(id, { name: newName }, { new: true });
console.log('Обновлен пользователь:', updatedUser);
}
createUser('Мария', 'maria@example.com').then(() => getUsers());
MongoDB идеально подходит для быстрого прототипирования и проектов с неструктурированными данными.
4. Сравнение PostgreSQL и MongoDB
Чтобы помочь вам сделать выбор, приведем краткое сравнение:
- Структура данных: PostgreSQL использует таблицы и строки; MongoDB — коллекции и документы.
- Гибкость схемы: В PostgreSQL схема строгая; в MongoDB — динамическая.
- Сложные запросы: PostgreSQL поддерживает JOIN и агрегации; MongoDB имеет свой мощный aggregation pipeline.
- Масштабирование: PostgreSQL лучше вертикальное; MongoDB — горизонтальное (шардирование).
- Когда выбирать: PostgreSQL — для финансовых систем, интернет-магазинов; MongoDB — для систем аналитики, IoT, блогов.
Заключение
В этой статье мы разобрали, как подключаться и выполнять базовые операции с двумя популярными базами данных из Node.js: PostgreSQL и MongoDB. Вы узнали, как установить драйверы, создать таблицу/коллекцию и работать с данными. Теперь вы можете выбрать подходящую БД для своего проекта и начать интегрировать её в своё приложение. Практикуйтесь — и вскоре работа с базами данных станет для