Entegre baz done PostgreSQL nan yon api wèb NodeJS + Express
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.