Entegre baz done PostgreSQL nan yon api wèb NodeJS + Express

Dènye mizajou: 18 Jan. 2024 11:27 a.m.
Tag :
Reading Duration : 0:10:00
Vizyalizasyon : 37
Disponib an : Kreyòl Ayisyen

Nou gen yon sèvè NodeJS ak Express ki ap woule deja.

Nou vle kapab konekete l ak yon baz done ki ekziste. Baz done sa fèt ak PostgreSQL.

Pou sa fèt, nou ap bezwen enstale PostgreSQL sou machin nou

Enstalasyon PostgreSQL

Si w pa ko gen postgresql enstale, ale sou sit sa https://www.postgresql.org/download/ pou w enstale li.

Lè w fin enstale li sou machin wap itilize a, nou ka konekte sou sèvè postgresql la, gras ak kòmand:

psql postgres

Wap wè ou vin gen yon entèfas konsa:

postgres=#

Si w vle kite entèfas sa, ou kapab tape \q.

Kounya an nou kreye yon itilizatè ak yon modpas sou sèvè PostgreSQL la. Sa enpòtan pou n kapab konekete ak baz done nou pral gen pou n kreye yo.

CREATE ROLE lemayzeur WITH LOGIN PASSWORD 'admin1234';

Answit, nap atribiye wol CREATEDB a, sou itilizatè nou sot kreye a ki se lemayzeur:

ALTER ROLE me CREATEDB;

An n kreye yon nouvo baz done ki rele blog_db

CREATE DATABASE blog_db;

An n konekte nan baz done a, ki se blog_db:

\c blog_db

Nap kreye yon nouvo tab anndan baz sa:

CREATE TABLE users (
  ID SERIAL PRIMARY KEY,
  name VARCHAR(30),
  email VARCHAR(30)
);

Nou kapab itilize youn nan lojisyèl ki popilè pou w manipile baz done postgresql, ki se: pgadmin4. Ou ka telechaje li epi enstale li nan https://www.pgadmin.org/download/

NOTE: Ou dwe kreye yon itilizatè nan postgresql ak tout modpas, pou w ka konekte sou baz done postgresql yo. Sa ka fèt nan pgadmin4, oubyen nan tèminal oubyen CMD la.

Ale nan pgadmin4, kreye yon baz done PostgreSQL ki rele blog_db

Nou pral itilize yon pakè ki rele pg.

Enstalasyon pakè pg

Pou nou enstale pake sa, nap enstale li ak npm.

npm install pg

Oubyen i olye de install pou pi senp:

npm i pg

Kounya nou gen pakè a, ki enstale nan node_modules nou yo, ak package.json.

Koneksyon Express ak yon baz done

Pou nou konekte yon sèvè ExpressJS ak yon baz done postgresql, li enpòtan pou postgresql te deja enstale sou òdinatè ou a, epi baz done sa te ekziste deja.

An nou kreye sèvè Express la

const express = require('express')

const app = express()

const PORT = 3000

app.listen(POST, ()=>{
  console.log(`Server running on https://localhost:${PORT}`)
})

Ann ajoute yon endpoint ki pou reponn ak rasin api wèb la

app.get('/', (req, res) => {
  res.json({ tuto: 'Node.js | Express | PostgreSQL' })
})

Kounya, pou nou itilize baz done nou te kreye a, nou ap oblije konekte ak li. Nou pral kreye yon fichye ki rele db.js, pou n konfigire koneksyon sa:

const Pool = require('pg').Pool

const pool = new Pool({
  user: '<user_ou_te_kreye_a>',
  host: 'localhost',
  database: '<non_baz_done_ou_kreye_a>',
  password: '<modpas_user_ou_te_kreye_a>',
  port: 5432,
})

module.exports = pool

Gras ak konfigirasyon sa, nou kreye yon koneksyon ak baz done ki te kreye a. Si gen yon enfòmasyon ou mete ki pa kòrèk, koneksyon an pap fèt lè nou ap itilize li.

ATANSYON: Lè w pral ebèje sit ou a, enfòmasyon sa yo dwe nan yon fichye .env olye pou w tape yo tou klè nan fichye JavaScript la.

Aksede done nan baz done a

Nou fin kreye konfigirasyon an, se moman pou nou itilize konfigrasyon sa pou n rekipere done anndan baz done a. Sonje nou te gen yon tab ki rele users anndan baz done a.

Eben ann kreye yon endpoint ki ap kapab rekipere tout itilizatè sa yo:

Men avan, an nou kreye yon fonksyon ki rekipere tout itilizatè yo pito:

import pool from './db'

const fetchUsers = async () => {
  try{
    const res = await pool.query('SELECT * FROM users ORDER BY id')
  }catch(error){
    return "Error"
  }
  return res.row;
}

app.get('/users', async (req, res) => {
  const data = await fetchUsers()
  return res.status(200).json(data)
})

Fonksyon yo asenkwòn, paske fòk nou tann rezilta rekèt SQL ki fèt yo.

Nou kapab ale pi lwen, pou n rekipere yon grenn itilizatè, si genyen.

import pool from './db'

const getUserById = async (id) => {
  try{
    const res = await pool.query('SELECT * FROM users WHERE id = $1', [id])
  }catch(error){
    return "Error"
  }
  return res.rows;
}

app.get('/users/:id', async (req, res) => {
  const id = parseInt(request.params.id)

  const data = await getUserById(id)
  return res.status(200).json(data)
})

Oubyen pou n kreye itilizatè:

import pool from './db'

const createUser = async ({ name, email}) => {
  try{
    const res = await pool.query('INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *', [name, email])
  }catch(error){
    return "Error"
  }
  return res.rows;
}

app.post('/users', async (req, res) => {
  const  { name, email }  = request.body

  const data = await createUser({ name, email})

  // retounen id, itilizatè ki kreye a.
  return res.status(201).json({id: data[0].id})
})

Ou kapab verifye nan pgadmin4, si itilizatè yo kreye lè w itilize endpoint POST sou /users la.