Maelezo ya
PostgreSQL (kwa kifupi kama Postgres) ni mojawapo ya mifumo ya database inayotumika sana katika utekelezaji wa programu. Postgres ni mfumo wa usimamizi wa database (RDBMS). Moja ya faida za kutumia Postgres ni msaada wake kwa maswali ya uhusiano (SQL) na yasiyo ya uhusiano (NoSQL).
Njia moja ya kuunganisha database na maombi ya wavuti ni kwa kutumia ORM (Object Relational Mapper). ORM inafanya kazi kama kiwango cha mawasiliano kati ya maombi yako na database. Lengo la mwongozo huu ni kueleza jinsi unaweza kutumia Postgres katika maombi yako ya Express kupitia Sequelize ORM.
Nafasi ya Sequelize ORM inajulikana kama:
TypeScript ya kisasa na Node.js ORM kwa Oracle, Postgres, MySQL, MariaDB, SQLite, na SQL Server, na zaidi.
TypeScript ya kisasa na Node.js ORM kwa Oracle, Postgres, MySQL, MariaDB, SQLite, na SQL Server, na zaidi.
Utakuwa kujenga API rahisi ya usimamizi wa kazi. API itakuwa na uwezo wa kuunda, orodha, update hali ya kukamilika, na kufuta kazi.
Mafunzo haya ni ya kwanza katika mfululizo ujao wa mafundisho yaliyokusudiwa kutumia database ya uhusiano katika Express kwa kutumia Sequelize. Katika mafundisho ya baadaye, utachunguza kupanda database, uhamiaji, na ushirika katika Sequelize.
Mahitaji ya
Ili kuendelea na tutorial hii, utahitaji zifuatazo:
- Mhariri wa maandishi (kwa mfano, VS Code)
- Mteja wa API kwa ajili ya kupima pointi za mwisho (kwa mfano, Postman)
- Node.js imewekwa kwenye kompyuta yako
- Ujuzi wa msingi wa Express
- Mfano wa Postgres unaofanya kazi ndani au mbali
Mradi wa Setup
Tutaanza kwa kuanzisha faili na mapendekezo sahihi kwa ajili ya kuunda programu ya Express na kufunga mipango inayohitajika. amri zilizotumika zinafaa tu kwa terminal ya Linux.
-
Create the project directory:
mkdir tasks-manager-api
-
Navigate to the project directory:
cd tasks-manager-api
-
Initialize the NPM package by running the following command to create a
package.json
file with default settings:npm init -y
-
Install Express and other core dependencies:
npm install express express-async-errors dotenv && npm install nodemon --save-dev
-
Install Postgres driver for Node.js:
npm install pg
-
Install Sequelize:
npm install sequelize
-
In the root directory, create the
models
andutils
folders:mkdir models utils
-
In the root directory, create a
.env
file, which will contain the server’s port number and the database URL of any Postgres instance:PORT=5000 DATABASE_URL=postgres://<user>:<password>@<host>:<port>/<database>
-
In the root directory, create the
index.js
file, which is the application entry point:touch index.js
-
Set up the command to run the local development server by editing the
scripts
object inpackage.json
:{ //… "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon index.js", "start": "node index.js" }, //… }
Muundo wa folda ya mradi unapaswa kuonekana kama hii:
Muundo wa Sequelize
Kuunda faili mbili katikautils
Uongozi wa:config.js
na yadb.js.
Mabadiliko ya mazingira ya uendeshaji
Kwa hiyo katikaconfig.js
Kuanza kucheza katika TopSlotSite , kufuata 3 hatua rahisi kujiandikisha..env
faili kwa kutumiadotenv
Kuanza kucheza katika TopSlotSite , kufuata 3 hatua rahisi kujiandikisha.PORT
na yaDATABASE_URL
kubadilika ili waweze kufikia katika sehemu zingine za programu.
yaconfig.js
Faili inapaswa kuwa na maudhui yafuatayo:
require('dotenv').config()
const PORT = process.env.PORT || 3000
const DATABASE_URL = process.env.DATABASE_URL
module.exports = {
PORT,
DATABASE_URL
}
Kuunda Instance ya Sequelize
Kwa hiyo katikadb.js
Unaweza kuunda kazi na uendelee haraka na matumizi ya masanduku. uendelee haraka na matumizi ya masanduku. uendelee haraka na matumizi ya masanduku.DATABASE_URL
Kuanza kucheza katika TopSlotSite , kufuata 3 hatua rahisi kujiandikisha.connectToDB,
ambayo itajaribu kuunganisha na database kwa kuitaauthenticate
Mwishowe, unaweza kuondoaconnectToDB
FUNKCTION na Mfano wa Sequelize.
yautils/db.js
Faili inapaswa kuwa na maudhui yafuatayo:
const Sequelize = require("sequelize");
const { DATABASE_URL } = require("./config");
const sequelize = new Sequelize(DATABASE_URL)
const connectToDB = async () => {
try {
await sequelize.authenticate()
console.log("Database connection established successfully.")
} catch (error) {
console.log("Unable to connect to the database:", error)
return process.exit(1)
}
return null
}
module.exports = {
connectToDB,
sequelize
}
Ufafanuzi wa Mfano wa Task
Mfano wa Sequelize ni muonekano wa meza katika database. Unaweza kufafanuaTask
Mfano wa kuongezeka kwa SequelizeModel
ya chuo kikuu na kuombaModel.init(attributes, options)
ya kazi.
Kwa hiyo katikamodels
Msimamizi Mjerumani akamwauliza kijanatask.js
Faili na maudhui yafuatayo:
const {Model, DataTypes} = require("sequelize")
const {sequelize} = require("../utils/db")
class Task extends Model {}
Task.init({
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
title: {
type: DataTypes.STRING,
allowNull: false
},
completed: {
type: DataTypes.BOOLEAN,
defaultValue: false
}
}, {
sequelize,
modelName: "Task",
timestamps: true,
underscored: true,
defaultScope: {
attributes: {
exclude: ["createdAt", "updatedAt"]
}
}
})
Task.sync()
module.exports = Task
yaattributes
Mfumo huu unafafanua muundo waTask
katika orodha ya database. yaTask
Mfumo huu una sifa tatu:
- id: Shamba la id ambayo ni kifungo cha msingi kinachoongezeka moja kwa moja kinachotumika kutambua kila rekodi.
- Jina: Shamba la mstari ambalo linawakilisha jina la kazi.
- kukamilika: Shamba la kukamilika lina thamani ya Boolean ambayo inaonyesha kama kazi imekamilika.
yaoptions
Mstari wa chini: Roho inawakilisha thamani nzuri.Task
Mfumo huu una chaguzi zifuatazo:
- Sequelize: Mfano wa Sequelize uliotengenezwa awali katika utils/db.js.
- modelName: Jina la meza iliyoundwa katika database.
- Timestamps: Ikiwa imewekwa kuwa True, huongeza shamba la createdAt na updatedAt moja kwa moja kwenye mfano.
- imeonyeshwa: Wakati imewekwa kuwa kweli , hufanya uongofu wa mashamba ya kesi ya camel katika kesi ya nyoka katika database.
- defaultScope: Inaondoa sifa fulani kwa default wakati wa kuuliza.
yaTask.sync()
Function synchronizes mifano na database kwa kuunda meza ikiwa meza haipo. Hata hivyo, unapaswa kutambua kwamba synchronization inapaswa kufanyika kwa kutumia uhamiaji.
Kuunda Server ya Express
Hatimaye, unaweka yote kwa pamoja kwa kuunda seva ya Express.index.js
faili, unaweza kuanzisha middleware inayohitajika, kufafanua njia za API endpoint, na kuendesha seva ya Express.
yastart
kazi ni wajibu wa kuanzisha server Express.start
Function kwanza inajaribu kuunganisha na database kwa kuitaconnectToDB()
Kama uhusiano ni mafanikio, huanza seva ya Express, ambayo inasikiliza kwenye bandari iliyotajwa.
yaindex.js
Faili ina maudhui yafuatayo:
require("express-async-errors");
const express = require("express");
const app = express();
const { PORT } = require("./utils/config");
const { connectToDB } = require("./utils/db");
const Task = require("./models/task");
// middlewares
app.use(express.json());
// routes
app.get("/api/tasks", async (req, res) => {
const tasks = await Task.findAll();
res.json({
message: "List of tasks",
tasks: tasks,
});
});
app.post("/api/tasks", async (req, res) => {
const { title } = req.body;
const task = await Task.create({ title });
res.status(201).json({
message: "Task created successfully",
task,
});
});
app.patch("/api/tasks/:id/toggle-completed", async (req, res) => {
const { id } = req.params;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ message: "Task not found" });
}
task.completed = !task.completed;
await task.save();
res.json({
message: task.completed
? "Task marked as completed"
: "Task marked as not completed",
task,
});
});
app.delete("/api/tasks/:id", async (req, res) => {
const { id } = req.params;
const task = await Task.findByPk(id);
if (!task) {
return res.status(404).json({ message: "Task not found" });
}
await task.destroy();
res.json({
message: "Task deleted successfully",
});
});
const start = async () => {
try {
await connectToDB();
app.listen(PORT, console.log(`Server is running on port ${PORT}`));
} catch (error) {
console.error(error);
process.exit(1);
}
};
start();
Utafiti wa API Endpoint
Sasa unaweza kuendelea kujaribu vituo vya mwisho vya API:
- Kuunda kazi mpya—POST /api/tasks:
- Orodha ya kazi zote—GET /api/tasks:
- Toggle hali ya kumaliza—PATCH /api/tasks/:id/toggle-kumaliza:
- Kuondoa kazi—DELETE /api/task:
Mwisho wa
Sasa unajua jinsi ya kuunganisha programu ya Express na database ya Postgres kwa kutumia Sequelize. Umeunda API rahisi ya usimamizi wa kazi, na katika mchakato huo, umeunda Sequelize, kuunganisha Sequelize na instance ya Postgres, uliamuaTask
na kuimarisha mfumo wa utunzaji wa API.
Kwa sasa, mantiki ya udhibiti imeandikwa katikaindex.js
katika mafundisho ya baadaye, tutakuwa kurekebisha msingi huu wa msimbo katika muundo zaidi unaoweza kupanua kwa kutumia udhibiti, routers, na uhamiaji wa Sequelize.
Kwa ajili ya kusoma zaidi, unapaswa kwenda kupitiaUfafanuzi wa Takwimukujifunza zaidi kuhusu kutafuta mifano, uthibitisho, ushirika, na zaidi.
Unaweza kupata msimbo kamili wa chanzo kwa mwongozo huu kwenyeya Github.
rasilimali ya
- Ufafanuzi wa Ufafanuzi (v6)
- PostgreSQL ni nini? - AWS
- Kutumia Databases ya Uhusiano na Sequelize - FullStackOpen
- Taarifa ya Express.js