Как создать CRUD API с использованием Node, PostgresSQL и Express
Начните управлять своими данными с помощью этого самого простого из приложений REST и узнайте о разработке современных веб-приложений, пока вы занимаетесь этим.
API CRUD управляет данными посредством четырех основных операций с базой данных: создание, чтение, обновление и удаление. Вы можете создать простой CRUD API, используя только Express и базу данных PostgreSQL.
Начните с создания сервера Express, к которому вы подключите PostgreSQL. Затем создайте функции CRUD и подключите их к конечным точкам API. Как только вы это сделаете, вы сможете подключить Node к PostgreSQL и выполнять запросы к базе данных по каждому маршруту.
Предварительные условия для создания API
Чтобы следовать этому руководству, вам необходимо:
- Установите Node на свой компьютер.
- Установите сервер PostgreSQL на свой компьютер.
- Иметь базовые знания Express.js.
Создать экспресс-сервер
Чтобы создать сервер Express, начните с создания нового каталога и входа в него:
mkdir notes
cd notes
Затем инициализируйте npm:
npm init -y
Эта команда создаст файл package.json в папке заметок. Наконец, установите Express.
npm install express
Создайте новый файл с именем index.js и добавьте следующий код.
const express = require("express");
const app = express();
app.use(express.urlencoded({
extended: true
}));
app.use(express.json())
app.listen(3000, () => console.log("Listening on port 3000"));
Это создаст новый сервер, прослушивающий порт 3000.
Создайте базу данных PostgreSQL
Выполните следующую команду в командной строке psql, чтобы создать базу данных PostgreSQL с именем Noteb.
postgres=# CREATE DATABASE notedb;
Запустите эту команду, чтобы просмотреть все базы данных Postgres и убедиться, что вы создали базу данных отмеченную:
postgres=# \l
Подключиться к базе данных
Прежде всего, подключите приложение Node к серверу PostgreSQL. Вы можете использовать модуль node-Postgres.
Запустите следующее, чтобы установить его через npm:
npm install pg
Рекомендуется подключаться к базе данных в отдельном файле.
Создайте новый файл с именем db.js и добавьте следующее.
const { Client } = require("pg");
const { user, host, database, password, port } = require("./dbConfig");
const client = new Client({
user,
host,
database,
password,
port,
});
client.connect();
module.exports = client;
Здесь вы экспортируете строку подключения, которую будете использовать для связи с базой данных. Обратите внимание, что вы читаете настройки подключения к базе данных из файла конфигурации dbConfig.js. Поэтому создайте dbConfig.js и добавьте в него следующие данные.
module.exports = {
user: "{dbUser}",
host: "{dbHost}",
database: "notedb",
password: "{dbPassword}",
port: 5432,
};
Не забудьте заменить данные базы данных своими локальными значениями.
Создайте таблицу PostgreSQL
В командной строке psql создайте таблицу с именем Notes. Для начала подключитесь к базе данных Noteb с помощью команды \c.
postgres=# \c notedb
Затем создайте таблицу в подключенной базе данных с помощью команды CREATE TABLE.
notedb=# CREATE TABLE notes (
ID SERIAL PRIMARY KEY,
note VARCHAR(255)
);
Эта таблица довольно проста. У него есть только идентификатор, который представляет собой автоматически сгенерированный первичный ключ, и текстовое поле с названием note.
Создать заметку
Вместо выполнения CRUD-операций в маршрутах создайте функции, которые будут взаимодействовать с базой данных, в отдельном файле.
Создайте вспомогательный файл с именем helper.js и импортируйте объект подключения из db.js.
const client = require("./db");
Используйте следующий код для создания функции createNote().
const createNote = (req, res) => {
try {
const { note } = req.body;
if (!note) {
throw Error("Send note in request body");
}
client.query(
"INSERT INTO notes (note) VALUES ($1)",
[note],
(err, data) => {
res.status(201).json({
error: null,
message: "Created new note",
});
}
);
} catch (error) {
res.status(500).json({
error: error.message,
message: "Failed to create new note",
});
}
};
Эта функция сначала проверяет, содержит ли тело запроса примечание. Если примечание отсутствует, выдается ошибка.
Чтобы создать заметку, функция использует предложение INSERT. Он возвращает объект JSON, содержащий нулевое сообщение об ошибке и сообщение об успехе в случае успеха.
Получить все заметки
Чтобы получить все примечания из таблицы, используйте предложение SELECT *.
const getNotes = (req, res) => {
try {
client.query("SELECT * FROM notes", (err, data) => {
if (err) throw err;
res.status(200).json({
err: null,
notes: data.rows,
});
});
} catch (error) {
res.status(500).json({
err: error.message,
notes: null,
});
}
};
getNotes() отправляет массив заметок в объект ответа, если запрос успешен.
Получить заметку по идентификатору
API также будет иметь конечную точку, которая возвращает заметку по идентификатору. В helper.js добавьте функцию getNoteById().
const getNoteById = (req, res) => {
try {
const { id } = req.params;
client.query("SELECT * FROM notes WHERE id=$1", [id], (err, data) => {
if (err) throw err;
res.status(200).json({
err: null,
note: data.rows[0],
});
});
} catch (error) {
res.status(500).json({
err: err.message,
note: null,
});
}
};
Эта функция вернет объект JSON, содержащий примечание и объект ошибки.
Обновить заметку по идентификатору
Чтобы обновить заметку, вам нужна заметка и идентификатор этой заметки. Вы получите примечание из тела запроса и идентификатор из URL-адреса.
Функция updateNoteById() использует предложение UPDATE для обновления существующей заметки новой заметкой.
const updateNoteById = (req, res) => {
try {
const { id } = req.params;
const { note } = req.body;
client.query(
"UPDATE notes SET note = $1 WHERE id = $2",
[note, id],
(err, data) => {
if (err) throw err;
res.status(201).json({
err: null,
message: "Updated note",
});
}
);
} catch (error) {
res.status(500).json({
err: error.message,
message: "Failed to update note",
});
}
};
Эта функция возвращает сообщение об успехе, если таблица обновлена, и сообщение об ошибке, если это не так.
Удалить заметку по идентификатору
Чтобы удалить заметку по идентификатору из таблицы, используйте следующий код.
const deleteNote = (req, res) => {
try {
const { id } = req.params;
client.query("DELETE FROM notes WHERE id=$1", [id], (err, data) => {
if (err) throw err;
res.status(200).json({
error: null,
message: "Note deleted",
});
});
} catch (error) {
res.status(500).json({
error: error.message,
message: "Failed to delete note",
});
}
};
Теперь, когда вы создали все функции CRUD, экспортируйте их.
В helper.js добавьте следующее.
module.exports = { createNote, getNotes, getNoteById, updateNoteById, deleteNote };
Вы импортируете их в index.js при создании конечных точек API.
Создание API-маршрутов
Последний шаг — создать конечные точки API в index.js для каждой операции CRUD.
Начните с импорта файла helper.js.
const db = require("./helper")
Затем создайте каждую конечную точку.
app.get("/notes", db.getNotes);
app.get("/note/:id", db.getNoteById);
app.put("/note/:id", db.updateNoteById);
app.post("/note", db.createNote);
app.delete("/note/:id", db.deleteNote);
REST API для обновления вашей базы данных
Закончив, вы можете проверить работу вашего API, используя клиент REST, например Postman, или написав модульные тесты. Вы должны быть в состоянии гарантировать, что все пять конечных точек работают так, как вы ожидаете.
Вы также можете проверять и управлять данными, добавленными в базу данных, с помощью инструмента pgAdmin. Это приложение с графическим интерфейсом, которое упрощает администрирование базы данных и взаимодействие с серверами PostgreSQL.