[Công nghệ Thông tin] -- [Web] -- [Công nghệ phần mềm] -- [PhoThong] -- [Đăng ký các khóa học] -- [Langbiang's Portfolio] -- [Học viên cũ] -- [10.000 giờ]
--------------- <> -----------------
---  KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM --->>>  CÁC KHÓA HỌC...
---  Nhận làm website, web app, chạy quảng cáo, digital marketing --->>>  LIÊN HỆ...

Tìm kiếm trong Blog

Web back-end (22) - Tạo cơ sở dữ liệu bằng Sequelize

Bài trước: Web back-end (21) - Lập trình với cơ sở dữ liệu 

-----

22 Tạo cơ sở dữ liệu bằng Sequelize

22.1 Tạo cơ sở dữ liệu rỗng

- Sử dụng pgAdmin (hoặc một phần mềm thao tác với Postgresql bất kỳ) để tạo một cơ sở dữ liệu rỗng (ví dụ, đặt tên là teoshopDB).

- Vào tập tin config/config.json của dự án (TeoShop), chỉnh sửa thông tin kết nối tới cơ sở dữ liệu.

[config/config.json]

{

  "development": {

    "username": "postgres",

    "password": "p@ssword1",

    "database": "teoshopDB",

    "host": "127.0.0.1",

    "dialect": "postgres"

  },

  "test": {

    "username": "root",

    "password": null,

    "database": "database_test",

Lưu ý: bạn sửa lại thông tin của mục password, database theo cài đặt trên máy của bạn.

22.2 Tạo lớp đối tượng

Vậy là chúng ta đã có cơ sở dữ liệu rỗng (tên là teoshopDB), chưa có bảng dữ liệu, chưa định nghĩa mối quan hệ giữa các bảng, chưa có dữ liệu.

Công việc tiếp theo chúng ta cần thực hiện là tạo các bảng cho cơ sở dữ liệu.

Để tạo bảng, chúng ta sẽ tạo lớp đối tượng tương ứng.

Ví dụ, chúng ta sẽ tạo lớp đối tượng có tên là Product (lưu ý: không có chữ s sau Product), bằng lệnh sau:

sequelize model:create --name Product --attributes name:string,imagePath:string

Trong đó,

- sequelize: lệnh của sequelize

- model:create: tạo model mới

- tùy chọn --name Product: tên của model sẽ tạo có tên là Product

- tùy chọn --attributes name:string,imagePath:string : định nghĩa tên và kiểu dữ liệu các cột của bảng. Bạn không nhất thiết phải liệt kê đầy đủ các cột của bảng ở dòng lệnh (vì dễ bị lỗi đánh máy), mà nên chỉnh sửa ở trong mã nguồn.

E:\TeoShop>sequelize model:create --name Product --attributes name:string,imagePath:string

Sequelize CLI [Node: 22.14.0,

CLI: 6.6.2, ORM: 6.37.7]

New model was created at E:\TeoShop\models\product.js .

New migration was created at E:\TeoShop\migrations\20250505121847-create-product.js .

Nếu lệnh sequelize model:create chạy thành công, nó sẽ tạo cho chúng ta 2 tập tin, là models\product.jsmigrations\ -create-product.js.

Chúng ta sẽ mở tập tin models\product.js để định nghĩa các cột còn lại của bảng Products (khi tạo bảng trong cơ sở dữ liệu sẽ có thêm chữ “s” sau chữ Product).

[models\product.js]

Product.init({

    name: DataTypes.STRING,

    imagePath: DataTypes.STRING,

    oldPrice: DataTypes.DECIMAL,

    summary: DataTypes.TEXT,

    description: DataTypes.TEXT,

    specification: DataTypes.TEXT,

    stars: DataTypes.FLOAT,

    quantity: DataTypes.INTEGER

  }, {

    sequelize,

    modelName: 'Product',

  });

Để thực thi nội dung đã được khai báo trong models\product.js, nhằm tạo ra bảng Products trong cơ sở dữ liệu teoshopDB, chúng ta sẽ viết đoạn mã trong TeoShop\index.js.

[TeoShop\index.js]

// khai bao de su dung engine da dinh nghia

app.set('view engine', 'hbs');

 

// routes va render trang index

app.get('/createTables', (req, res) => {

    let models = require('./models');

    models.sequelize.sync().then(()=> {

        res.send('tables created');

    });

});

app.get('/', (req, res) => {

    res.render('index'); // se lay index.hbs do vao {{{ body }}} trong main.hbs

});

Ý nghĩa của đoạn mã:

- Đoạn mã này định nghĩa một route GET tại /createTables. Khi người dùng truy cập đường dẫn này, ứng dụng sẽ:

- Tham chiếu tới (import) các định nghĩa model từ thư mục ./models.

- Gọi phương thức sync() của Sequelize để tạo các bảng trong cơ sở dữ liệu (nếu chúng chưa tồn tại) dựa trên các model đã định nghĩa.

- Sau khi quá trình đồng bộ hóa hoàn tất thành công, ứng dụng sẽ gửi phản hồi 'tables created' về cho client (trình duyệt). Học thêm về viết hàm theo kiểu Promise (.then()).

Lưu ý: đoạn mã này thường được sử dụng trong quá trình phát triển (development) hoặc trong các thiết lập ban đầu để nhanh chóng tạo cấu trúc cơ sở dữ liệu dựa trên các model đã định nghĩa. Trong môi trường triển khai (production), việc tự động tạo hoặc cập nhật bảng theo cách này thường không được khuyến khích hoặc cần được kiểm soát chặt chẽ hơn. Việc thay đổi schema cơ sở dữ liệu trong môi trường production có thể gây ra rủi ro mất dữ liệu hoặc ngưng hệ thống (downtime). Thay vào đó, người ta thường sử dụng migrations để quản lý các thay đổi lược đồ cơ sở dữ liệu một cách an toàn và có kiểm soát.

Lưu lại tập tin mã nguồn TeoShop\index.js, khởi động lại web server, mở trình duyệt, nhập vào đường dẫn: http://localhost:9000/createTables

Nếu quá trình tạo bảng thành công, bạn sẽ thấy trên trình duyệt xuất hiện dòng chữ “tables created”; mở cửa sổ dòng lệnh trên máy server sẽ thấy xuất các dòng lệnh tạo bảng; mở cơ sở dữ liệu (teoshopDB) trong pgAdmin sẽ thấy xuất hiện bảng Products với các cột đã định nghĩa (teoshopDB\Schemas\public\Tables).

22.3 Bài tập

Bài tập 22.1 Tạo bảng Products bằng Sequelize.

-----

Cập nhật: 6/5/2025

Bài sau: Web back-end (23) - Tạo các bảng và mối quan hệ