Lập trình Node.js - kết nối, truy xuất cơ sở dữ liệu
Trong phần này chúng ta sẽ sử dụng:
- OS: Linux – Ubuntu
- DBMS: PostgreSQL
- Programming Language: Node.js
- Code Editor: Visual Studio Code (VS Code)
Chúng ta sẽ sử dụng 'node-postgres' như là một lớp giao tiếp với cơ sở dữ liệu PostgreSQL. Thông qua node-postgres chúng ta có thể viết chương trình trong NodeJs để truy xuất và lưu trữ dữ liệu thông qua PostgreSQL.
Đầu tiên, chúng ta tạo một ứng dụng Node.js đơn giản như: “NODE-POSTGRES”
Tạo một thư mục NODE-POSTGRES, di chuyển vào thư mục NODE-POSTGRES và mở VS Code để tiến hành lập trình ứng dụng.
mkdir NODE-POSTGRES
cd NODE-POSTGRES
code .
Từ thanh công cụ File Explorer, nhấn nút New File... để tạo tập tin “index.js”.
Trong file index.js, chúng ta trích xuất lớp Pool từ node-postgres
const { Pool } = require('pg')
Kế tiếp tạo thực thể “Pool” để tạo kết nối tới cơ sở dữ liệu
const pool = new Pool({
user: USER_NAME,
database: DATABASE_NAME,
password: PASSWORD,
port: PORT,
host: HOST_NAME,
})
- USER_NAME: tên người dùng được tạo trong Postgres
- DATABASE_NAME: tên cơ sở dữ liệu được tạo trong Postgres
- PASSWORD: mật khẩu của người dùng trong Postgres
- PORT: cổng Postgres server đang lắng nghe. Cổng mặc định thường là 5432
- HOST_NAME: tên máy chủ hoặc địa chỉ IP của Postgres server
Để minh họa việc kết nối tới cơ sở dữ liệu, đầu tiên chúng ta sẽ tạo cơ sở dữ liệu mẫu “congty”
Đầu tiên đăng nhập vào hệ quản trị cơ sở dữ liệu Postgres với quyền sudo
sudo -u postgres psql
Sau khi đăng nhập vào Postgres shell thành công, màn hình sẽ như sau:
postgres=#
Tạo người dùng mới trong Postgres
CREATE USER test WITH PASSWORD ‘test123’;
Tạo cơ sở dữ liệu mẫu và gán quyền sở hữu với người dùng “test”
CREATE DATABASE congty OWNER test;
Thêm người dùng “test” trong Ubuntu
sudo adduser fish_user
Để đăng nhập vào Postgres với người dùng “test” trong cơ sở dữ liệu “congty”, chúng ta sử dụng cú pháp lệnh sau:
sudo -u test psql -d congty
Sử dụng SQL tạo table nhanvien như sau:
congty=> CREATE TABLE nhanvien(
congty=> fname character varying(15) NOT NULL,
congty=> minit character(1) ,
congty=> lname character varying(15) NOT NULL,
congty=> ssn character(9) NOT NULL,
congty=> bdate date,
congty=> address character varying(35),
congty=> sex character(1),
congty=> salary numeric(10,2),
congty=> dno integer DEFAULT 1);
Kiểm tra lại bảng nhanvien đã được tạo bằng cú pháp lệnh sau:
congty=> \dt
Hình ảnh dưới liệt kê các quan hệ trong cơ sở dữ liệu “congty”
Thêm một dòng dữ liệu nhân viên, bằng cách sử dụng đối tượng “pool” (một đối tượng đại diện một kết nối của người dùng tới cơ sở dữ liệu “congty”) trong phần trên như sau:
Pool.query(‘INSERT INTO nhanvien (fname, minit, lname, ssn, bdate, address, sex, salary) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)’, [fname, minit, lname, ssn, bdate, address, sex, salary]);
Hình dưới mô tả chi tiết mã nguồn các thêm một dữ liệu nhân viên vào cơ sở dữ liệu “congty” do người dùng cung cấp
Kết quả sau khi lưu dữ liệu nhân viên “Franklin”, màn hình sẽ xuất ra tên nhân viên đó.
Truy xuất danh sách nhân viên, bằng cách dùng hàm “query” như sau:
Pool.query(“SELECT * FROM nhanvien”);
Chi tiết mã nguồn cách đọc dữ liệu của quan hệ “nhanvien” trong CSDL "congty"
Kết quả của truy vấn quan hệ ”nhanvien”
Chỉnh sửa lương của nhân viên theo mã số nhân viên (hai thông tin mã số nhân viên “ssn” và lương nhân viên “salary” được người dùng cung cấp) như sau:
Pool.query(“UPDATE nhanvien SET salary =$1 WHERE ssn=$2”,[salary, ssn]);
Mô tả chi tiết mã nguồn cách chỉnh sửa dữ liệu “salary” của quan hệ “nhanvien” trong cơ sở dữ liệu "congty" theo thông tin “ssn”.
Kết quả:
Xóa dữ liệu nhân viên theo mã số nhân viên “ssn” như sau:
Pool.query(“DELETE from nhanvien WHERE ssn=$2”,[ssn]);
Hình dưới mô tả chi tiết mã nguồn cách xóa một nhân viên của quan hệ “nhanvien” trong cơ sở dữ liệu "congty" theo thông tin mã nhân viên “ssn”
Kết quả của thao tác xóa dữ liệu nhân viên
Enjoy it!