287 skaitymai

Kaip prijungti „Express“ programą prie „Postgres“ naudojant „Sequelize“

pateikė Michael Ikoko8m2025/06/21
Read on Terminal Reader

Per ilgai; Skaityti

Ši pamoka paaiškina, kaip naudoti „Postgres“ savo „Express“ programoje. Jis naudoja „Sequelize ORM“, kad prijungtų duomenų bazę prie žiniatinklio programos. API galės kurti, sąrašą, atnaujinti užbaigimo būseną ir ištrinti užduotis.
featured image - Kaip prijungti „Express“ programą prie „Postgres“ naudojant „Sequelize“
Michael Ikoko HackerNoon profile picture
0-item

Įvadas

PostgreSQL (sutrumpinta kaip Postgres) yra viena iš dažniausiai naudojamų duomenų bazių kuriant programinės įrangos programas. Postgres yra bendrojo tikslo, atviro kodo, objektinio ryšio duomenų bazių valdymo sistema (RDBMS). Vienas iš naudos iš Postgres privalumų yra jo palaikymas tiek reliacinių (SQL) ir ne-reliacinių (NoSQL) užklausų.


Vienas iš būdų prijungti duomenų bazę prie žiniatinklio programos yra naudojant ORM (Object Relational Mapper). ORM veikia kaip komunikacijos sluoksnis tarp jūsų paraiškos ir duomenų bazės.Šio vadovėlio tikslas yra paaiškinti, kaip galite naudoti Postgres savo Express programoje per Sequelize ORM.


Sequelize ORM apibūdinamas kaip:

Šiuolaikinis „TypeScript“ ir „Node.js“ ORM „Oracle“, „Postgres“, „MySQL“, „MariaDB“, „SQLite“ ir „SQL Server“ ir kt.

Šiuolaikinis „TypeScript“ ir „Node.js“ ORM „Oracle“, „Postgres“, „MySQL“, „MariaDB“, „SQLite“ ir „SQL Server“ ir kt.


Jūs sukursite paprastą užduočių valdymo API. API galės kurti, sąrašą, atnaujinti užbaigimo būseną ir ištrinti užduotis.


Šis vadovas yra pirmasis iš būsimos serijos vadovėlių, orientuotų į ryšių duomenų bazių naudojimą "Express" naudojant "Sequelize".

Išankstinės sąlygos

Norėdami tęsti šią pamoką, jums reikės:

  • Teksto redaktorius (pvz., VS kodas)
  • API klientas, skirtas išbandyti galinius taškus (pvz., Pašto darbuotojas)
  • Node.js yra įdiegta jūsų kompiuteryje
  • Pagrindinės ekspreso žinios
  • „Postgres“ atvejis, veikiantis vietoje arba nuotoliniu būdu

Projekto įkūrimas

Mes pradėsime nustatydami atitinkamus failus ir katalogus, kad sukurtume „Express“ programą ir įdiegtume reikiamus paketus.


  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"
        },
        //…
    }
    

Projekto aplanko struktūra turėtų atrodyti taip:

Konfigūracija Sequelize

Sukurkite du failus įutilsDirektorių :config.jsirdb.js.

Įkrovimo aplinkos kintamieji

įconfig.jsfailą, įkelkite aplinkos kintamuosius iš.envFailas naudojantdotenvpakuotės. Tada eksportuotiPORTirDATABASE_URLkintamieji, kad juos būtų galima pasiekti kitose programos dalyse.


config.jsFailas turi turėti tokį turinį:

require('dotenv').config()

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

module.exports = {
    PORT,
    DATABASE_URL
}

Sukurkite Sequelize Instance

įdb.jsfailą, sukurkite Sequelize instance. Galite sukurti Sequelize instance perduodami duomenų bazės ryšio URI (saugomąDATABASE_URL) į Sequelize constructor. Tada sukuriate funkcijąconnectToDB,bus išbandytas ryšys su duomenų baze, paskambinusauthenticatefunkcija. galiausiai, jūs eksportuojateconnectToDBfunkcijos ir sekvestracijos instancijos.


utils/db.jsFailas turi turėti tokį turinį:

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
}


Apibrėžti užduočių modelį

„Sequelize“ modelis yra lentelės pateikimas duomenų bazėje.Taskmodelis pratęsdamas SequelizeModelKlasė ir skambinimasModel.init(attributes, options)ir funkcijos.


įmodelsdirektorius, sukurkitetask.jsFailas su tokiu turiniu:

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

attributesParametrai apibrėžia struktūrąTaskDuomenų bazės lentelė.ltTaskModelis turi tris atributus:

  • id: Visų skaičių laukas, kuris yra automatiškai didinamas pirminis raktas, naudojamas unikaliai identifikuoti kiekvieną įrašą.
  • pavadinimas: eilutės laukas, kuris atstovauja užduoties pavadinimą.
  • užbaigtas: užbaigtas laukas turi Boolio reikšmę, kuri rodo, ar užduotis buvo atlikta.


optionsparametras nustato, kaip „Sequelize“ tvarko modelį.TaskModelis turi šias galimybes:

  • Sequelize: Sequelize instancija, sukurta anksčiau Utils/db.js.
  • modelName: lentelės, sukurtos duomenų bazėje, pavadinimas.
  • Laiko žymės: Kai nustatoma „True“, į modelį automatiškai įtraukiami laukai „CreatedAt“ ir „UpdatedAt“.
  • Pabrėžiama: Nustatytas į true , konvertuoja camel Case laukus į gyvatės atvejį duomenų bazėje.
  • defaultScope: Išskiria tam tikrus atributus pagal numatytuosius nustatymus, kai užklausos.


Task.sync()funkcija sinchronizuoja modelį su duomenų baze, sukurdama lentelę, jei lentelės neegzistuoja.

Ekspreso serverio kūrimas

Galiausiai, jūs viską sujungėte, sukurdami "Express" serverį.index.jsfailą, įdiegiate reikiamą tarpinę programinę įrangą, apibrėžiate API galinių taškų maršrutus ir paleiskite ekspresinį serverį.


startfunkcija yra atsakinga už „Express“ serverio inicijavimą.startfunkcija pirmiausia išbandys ryšį su duomenų baze, paskambindamaconnectToDB()Jei ryšys yra sėkmingas, jis paleidžia „Express“ serverį, kuris klausosi nurodyto uosto.


index.jsFailas turi tokį turinį:

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

API Endpoint naudojimas

Dabar galite pradėti išbandyti API galinius taškus:

  1. Sukurkite naują užduotį — POST /api/tasks:

Post Request

  1. Sąrašas visų užduočių — GET /api/tasks:

Get Request

  1. Perkelkite užbaigimo būseną —PATCH /api/tasks/:id/toggle-užbaigtas:

Patch Request

  1. Ištrinti užduotį – Ištrinti /api/task:

Delete Request

Išvada

Dabar žinote, kaip prijungti „Express“ programą prie „Postgres“ duomenų bazės naudojant „Sequelize“. Jūs sukūrėte paprastą užduočių valdytojo API, o proceso metu konfigūruojate „Sequelize“, prijungėte „Sequelize“ prie „Postgres“ instituto, apibrėžėteTaskPavyzdžiui, jie sukūrė API galinius taškus.


Šiuo metu kontrolieriaus logika yra parašytaindex.jsArtimiausiuose vadovėliuose, mes iš naujo sukursime šią kodo bazę į labiau skalbiamą struktūrą, naudojant valdiklius, maršrutizatorius ir Sequelize migracijas.


Norėdami skaityti toliau, turėtumėte eiti perSequelizuoti dokumentacijąsužinoti daugiau apie modelių užklausas, patvirtinimus, asociacijas ir dar daugiau.


Galite rasti visą šio vadovėlio šaltinio kodą„GitHub“.

išteklių

  • Dokumentų rinkimas (v6)
  • Kas yra PostgreSQL?
  • Ryšių duomenų bazių naudojimas su „Sequelize“ – „FullStackOpen“
  • „Express.js“ dokumentacija


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.

PABAIGTI ŽYMES

ŠIS STRAIPSNIS BUVO PRISTATYMAS...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks