266 lexime

Si të lidhni një aplikacion Express me Postgres duke përdorur Sequelize

nga michaeliko...8m2025/06/21
Read on Terminal Reader

Shume gjate; Te lexosh

Ky tutorial shpjegon se si të përdorni Postgres në aplikacionin tuaj Express. Ai përdor Sequelize ORM për të lidhur një bazë të dhënash me një aplikacion web. API do të jetë në gjendje të krijojë, listë, të përditësojë statusin e përfundimit dhe të fshijë detyrat.
featured image - Si të lidhni një aplikacion Express me Postgres duke përdorur Sequelize
Michael Ikoko HackerNoon profile picture
0-item

Hyrje

PostgreSQL (shkurtuar si Postgres) është një nga bazat e të dhënave më të përdorura në ndërtimin e aplikacioneve softuerike. Postgres është një sistem i përgjithshëm, me burim të hapur, objekt-relational database management system (RDBMS). Një nga avantazhet e përdorimit të Postgres është mbështetja për të dy relational (SQL) dhe jo-relational (NoSQL) querying.


Një mënyrë për të lidhur një bazë të dhënash me një aplikacion web është përmes përdorimit të një ORM (Object Relational Mapper). Një ORM vepron si një shtresë e komunikimit midis aplikacionit tuaj dhe bazës së të dhënave. Qëllimi i këtij tutorial është për të shpjeguar se si ju mund të përdorni Postgres në aplikacionin tuaj Express përmes Sequelize ORM.


Sequelize ORM përshkruhet si:

Një TypeScript modern dhe Node.js ORM për Oracle, Postgres, MySQL, MariaDB, SQLite dhe SQL Server, dhe më shumë.

Një TypeScript modern dhe Node.js ORM për Oracle, Postgres, MySQL, MariaDB, SQLite dhe SQL Server, dhe më shumë.


Ju do të ndërtoni një API të thjeshtë të menaxhimit të detyrave. API do të jetë në gjendje të krijojë, të listojë, të përditësojë statusin e përfundimit dhe të fshijë detyrat.


Ky tutorial është i pari në një seri të ardhshme të tutorialeve të përqendruara në përdorimin e bazave të të dhënave relacionale në Express duke përdorur Sequelize.

Parashikimet

Për të vazhduar me këtë tutorial, ju do të duhet:

  • Një redaktor i tekstit (p.sh. VS Code)
  • Një klient API për testimin e pikave të fundit (p.sh. Postman)
  • Node.js është instaluar në kompjuterin tuaj
  • Njohuritë themelore të Express
  • Një instancë e Postgres që funksionon ose lokalisht ose në distancë

Projekti i instalimit

Ne do të fillojmë me vendosjen e skedarëve dhe directories përshtatshme për krijimin e një aplikacioni Express dhe instalimin e paketave të nevojshme.


  1. Create the project directory:

        mkdir tasks-manager-api
    
  2. Navigate to the project directory:

        cd tasks-manager-api
    
  3. Initialize the NPM package by running the following command to create a package.json file with default settings:

        npm init -y
    
  4. Install Express and other core dependencies:

       npm install express express-async-errors dotenv && npm install nodemon --save-dev
    
  5. Install Postgres driver for Node.js:

       npm install pg
    
  6. Install Sequelize:

       npm install sequelize
    
  7. In the root directory, create the models and utils folders:

    mkdir models utils
    
  8. 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>
    
  9. In the root directory, create the index.js file, which is the application entry point:

       touch index.js
    
  10. Set up the command to run the local development server by editing the scripts object in package.json:

    {
        //…
        "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1",
            "dev": "nodemon index.js",
            "start": "node index.js"
        },
        //…
    }
    

Struktura e dosjes së projektit duhet të duket kështu:

Konfigurimi i sekuencës

Krijoni dy skedarë nëutilsDrejtorë :config.jsdhedb.js.

Variablat e mjedisit të ngarkesës

Në tëconfig.jsLlogaritni variablat e mjedisit nga.envdosjet duke përdorurdotenvpaketa. pastaj të eksportojëPORTdheDATABASE_URLvariablat në mënyrë që ato të mund të arrihen në pjesë të tjera të aplikacionit.


config.jsDosja duhet të ketë përmbajtjen e mëposhtme:

require('dotenv').config()

const PORT = process.env.PORT || 3000
const DATABASE_URL = process.env.DATABASE_URL

module.exports = {
    PORT,
    DATABASE_URL
}

Krijimi i një sequelize instance

Në tëdb.jsfile, krijoni një instancë Sequelize. Mund të krijoni një instancë Sequelize duke kaluar URI-në e lidhjes së bazës së të dhënave (e ruajtur nëDATABASE_URL) në Sequelize constructor. Pastaj krijoni një funksionconnectToDB,që do të testojë lidhjen me bazën e të dhënave duke thirrurauthenticatePërfundimisht, ju mund të eksportoniconnectToDBFunksioni dhe instanca e sekuestrimit.


utils/db.jsDosja duhet të ketë përmbajtjen e mëposhtme:

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
}


Përcaktimi i modelit të detyrës

Një model sequelize është një përfaqësim i një tabele në bazën e të dhënave.Taskmodel duke zgjeruar sequelizeModelklasë dhe të thërrasëModel.init(attributes, options)funksioneve të


Në tëmodelsdrejtues, të krijojëtask.jsFaqe me përmbajtjen e mëposhtme:

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

attributesParametri përcakton strukturën eTaskTabela në bazën e të dhënave:TaskModeli ka tre atribute:

  • id: Një fushë e numrit të plotë që është një çelës primar automatikisht rritës i përdorur për të identifikuar në mënyrë unike çdo rekord.
  • Titulli: Një fushë string që përfaqëson emrin e detyrës.
  • përfunduar: Fusha e përfunduar ka një vlerë Boolean që tregon nëse detyra është kryer.


optionsparametra konfiguron se si Sequelize trajton modelin.TaskModeli ka opsionet e mëposhtme:

  • sequelize: Instanca e Sequelize e krijuar më parë në utils/db.js.
  • modelName: Emri i tabelës së krijuar në bazën e të dhënave.
  • Timestamps: Kur vendoset në True, shton fushat e krijuaraNë dhe të përditësuarNë automatikisht në model.
  • nënvizuar: Kur vendoset në True , konverton fushat Camel Case në rastin e gjarprit në bazën e të dhënave.
  • defaultScope: Përjashton atribute të caktuara sipas parazgjedhjes gjatë pyetjes.


Task.sync()Funksioni sinkronizon modelin me bazën e të dhënave duke krijuar tabelën nëse tabela nuk ekziston.

Krijimi i Express Server

Së fundi, ju i vendosni të gjitha së bashku duke krijuar serverin Express.index.jsfile, ju vendosni middleware e nevojshme, përcaktoni API Endpoint Routes, dhe ekzekutoni Express Server.


startFunksioni është përgjegjës për inicializimin e serverit Express.startFunksioni i parë teston lidhjen me bazën e të dhënave duke thirrurconnectToDB()Nëse lidhja është e suksesshme, fillon serveri Express, i cili dëgjon në portin e specifikuar.


index.jsDosja ka përmbajtjen e mëposhtme:

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();

Përdorimi i API Endpoint

Ju tani mund të vazhdoni për të testuar API Endpoints:

  1. Krijo një detyrë të re—POST /api/tasks:

Post Request

  1. Lista e të gjitha detyrave—GET /api/tasks:

Get Request

  1. Toggle statusin e përfundimit—PATCH /api/tasks/:id/toggle-e përfunduar:

Patch Request

  1. Fshij një detyrë—DELETE /api/task:

Delete Request

Konkludimi

Tani ju e dini se si të lidhni një aplikacion Express me një bazë të dhënash Postgres duke përdorur Sequelize. Ju keni ndërtuar një API të thjeshtë të menaxherit të detyrave, dhe në proces, ju keni konfiguruar Sequelize, lidhur Sequelize me një instancë Postgres,TaskKrijimi dhe përdorimi i API Endpoints


Aktualisht, logjika e kontrolluesit është shkruar nëindex.jsNë tutorialet e ardhshme, ne do ta rifaktorizojmë këtë bazë kodesh në një strukturë më të shkallëzueshme duke përdorur kontrolluesit, routerët dhe migracionet Sequelize.


Për të lexuar më tej, ju duhet të kaloni nëpërDokumentacioni i shpejtëpër të mësuar më shumë rreth pyetjeve të modelit, validimeve, asociacioneve dhe më shumë.


Ju mund të gjeni kodin burim të plotë për këtë tutorial nëGithub.

Burimet

  • Përshkrimi i dokumentit (v6)
  • Çfarë është PostgreSQL?
  • Përdorimi i bazave të të dhënave relacionale me Sequelize – FullStackOpen
  • Dokumentacioni Express.js


L O A D I N G
. . . comments & more!

About Author

Michael Ikoko HackerNoon profile picture
Michael Ikoko@michaelikoko
I'm a full-stack web developer and technical writer who creates beginner-friendly tutorials, API walkthroughs, and clear technical documentation.

VARUR TAGS

KY ARTIKU U PARAQIT NË...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks