یک CRUD API داده ها را از طریق چهار عملیات پایه پایگاه داده مدیریت می کند: ایجاد، خواندن، به روز رسانی و حذف. فقط با Express و پایگاه داده PostgreSQL می توانید یک CRUD API ساده ایجاد کنید.
یک CRUD API داده ها را از طریق چهار عملیات پایه پایگاه داده مدیریت می کند: ایجاد، خواندن، به روز رسانی و حذف. فقط با Express و پایگاه داده PostgreSQL می توانید یک CRUD API ساده ایجاد کنید.
با ایجاد یک سرور Express شروع کنید که PostgreSQL را به آن متصل خواهید کرد. سپس، توابع CRUD را ایجاد کنید و آنها را به نقاط انتهایی API متصل کنید. پس از انجام این کار، می توانید Node را به PostgreSQL متصل کنید و در هر مسیر کوئری های پایگاه داده را انجام دهید.
پیش نیازهای ساخت API
برای دنبال کردن این آموزش، باید:
- Node را روی دستگاه خود نصب کنید.
- سرور PostgreSQL را روی دستگاه خود نصب کنید.
- دانش اولیه Express.js را داشته باشید.
یک سرور اکسپرس ایجاد کنید
برای ایجاد یک سرور Express، با ایجاد یک دایرکتوری جدید و وارد کردن آن شروع کنید:
mkdir notes
cd notes
سپس npm را مقداردهی اولیه کنید:
npm init -y
این دستور یک فایل package.json در پوشه notes ایجاد می کند. در نهایت 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 ایجاد کنید
برای ایجاد پایگاه داده PostgreSQL به نام notedb دستور زیر را در خط فرمان psql اجرا کنید.
postgres=# CREATE DATABASE notedb;
این دستور را اجرا کنید تا همه پایگاه های داده Postgres را لیست کنید و بررسی کنید که پایگاه داده notedb را ایجاد کرده اید:
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 ایجاد کنید. برای شروع، با استفاده از دستور \c به پایگاه داده notedb متصل شوید.
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 };
هنگام ایجاد نقاط پایانی API، آنها را در index.js وارد خواهید کرد.
مسیرهای 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);
یک API REST برای به روز رسانی پایگاه داده شما
پس از اتمام کار، میتوانید با استفاده از یک کلاینت REST مانند Postman یا با نوشتن تستهای واحد بررسی کنید که API شما کار میکند. شما باید بتوانید اطمینان حاصل کنید که پنج نقطه پایانی همه همانطور که انتظار دارید کار می کنند.
همچنین می توانید داده هایی را که به پایگاه داده اضافه کرده اید با استفاده از ابزار pgAdmin بررسی و مدیریت کنید. این یک برنامه رابط کاربری گرافیکی است که مدیریت پایگاه داده و تعامل با سرورهای PostgreSQL را آسان می کند.