Hoang  Kim

Hoang Kim

1658720197

Cách sử dụng Sequelize với Node.js và MySQL

Tìm hiểu cách cài đặt và cấu hình Sequelize với MySQL. Sử dụng Sequelize để tạo cơ sở dữ liệu và mô hình, cũng như thực hiện các thao tác chèn, chọn, xóa và hơn thế nữa 

Sequelize là một Trình lập bản đồ quan hệ đối tượng dựa trên Node.js giúp bạn dễ dàng làm việc với cơ sở dữ liệu MySQL , MariaDB , SQLite , PostgreSQL và hơn thế nữa. Một Object Relational Mapper thực hiện các chức năng như xử lý các bản ghi cơ sở dữ liệu bằng cách biểu diễn dữ liệu dưới dạng các đối tượng. Sequelize có một cơ chế di chuyển mạnh mẽ có thể chuyển đổi các lược đồ cơ sở dữ liệu hiện có thành các phiên bản mới. Nhìn chung, Sequelize cung cấp hỗ trợ tuyệt vời cho đồng bộ hóa cơ sở dữ liệu, tải nhanh, liên kết, giao dịch và di chuyển cơ sở dữ liệu đồng thời giảm thời gian phát triển và ngăn chặn việc tiêm SQL.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Sequelize với MySQL trên môi trường phát triển cục bộ của bạn. insertTiếp theo, bạn sẽ sử dụng Sequelize để tạo cơ sở dữ liệu và mô hình , cũng như thực hiện selectdeletecác hoạt động. Sau đó, bạn sẽ tạo các liên kết theo trình tự cho các mối quan hệ một-một , một-nhiềunhiều-nhiều . Cuối cùng, bạn sẽ tạo các truy vấn thô Sequelize để thay thế mảng và đối tượng.

Hướng dẫn này đã được thử nghiệm trên Node.js phiên bản 14.17.6 và npmphiên bản 6.14.15 trên macOS Catalina.

Bước 1 - Cài đặt và cấu hình Sequelize

Trong bước này, bạn sẽ cài đặt Sequelize và tạo kết nối đến cơ sở dữ liệu MySQL của mình. Để làm điều đó, trước tiên bạn sẽ tạo một ứng dụng Node.js. Sau đó, bạn sẽ cài đặt Sequelize, cấu hình cơ sở dữ liệu MySQL và phát triển một ứng dụng đơn giản.

Cài đặt Sequelize

Bắt đầu bằng cách tạo một thư mục dự án. Trong ví dụ này, bạn có thể sử dụng hello-world. Sau khi thư mục được tạo, hãy điều hướng đến thư mục bằng terminal:

mkdir hello-world
cd hello-world

Sau đó, tạo một ứng dụng Node.js mẫu bằng lệnh sau:

npm init

Tiếp theo, bạn sẽ được nhắc trả lời một số câu hỏi thiết lập. Sử dụng đầu ra sau cho cấu hình của bạn. Nhấn ENTERđể sử dụng giá trị mặc định được hiển thị và đảm bảo đặt điểm nhập chính là server.js. Điều này tạo ra một cấu trúc dự án dễ bảo trì.

Đầu ra sẽ trông như sau, sẽ điền vào package.jsontệp:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Tiếp theo, tạo một server.jstệp trống bên trong thư mục dự án:

touch server.js

Sau khi làm theo các bước trước đó, cấu trúc thư mục cuối cùng của bạn sẽ giống như sau:

hello-world/
├─ package.json
├─ server.js

Bây giờ bạn có thể cài đặt Sequelize bằng lệnh sau:

npm i sequelize@6.11.0

Lưu ý: Lệnh này cài đặt phiên bản 6.11.0. Nếu bạn cần cài đặt phiên bản mới nhất, hãy chạy npm i sequelize.

Sau những bản cập nhật này, package.jsontệp bây giờ trông giống như sau:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sequelize": "^6.11.0"
  }
}

Trong dependenciesphần này, bây giờ bạn sẽ thấy một phụ thuộc Sequelize.

Bạn đã thiết lập dự án và cài đặt Sequelize. Tiếp theo, bạn sẽ tạo một cơ sở dữ liệu mẫu để kết nối.

Tạo cơ sở dữ liệu mẫu

Là một phần của điều kiện tiên quyết, bạn đã cài đặt và định cấu hình MySQL, bao gồm cả việc tạo người dùng. Bây giờ bạn sẽ tạo một cơ sở dữ liệu trống.

Để làm điều đó, trước tiên, bạn cần đăng nhập vào phiên bản MySQL của mình. Nếu bạn đang chạy từ xa, bạn có thể sử dụng công cụ ưa thích của mình. Nếu bạn đang sử dụng phiên bản MySQL chạy cục bộ, bạn có thể sử dụng lệnh sau, thay thế your_username bằng tên người dùng MySQL của bạn:

mysql -u your_username -p

-ulà tên người dùng và -ptùy chọn được chuyển nếu tài khoản được bảo mật bằng mật khẩu.

Máy chủ MySQL sẽ hỏi mật khẩu cơ sở dữ liệu của bạn. Nhập mật khẩu của bạn và nhấn ENTER.

Khi bạn đã đăng nhập, hãy tạo một cơ sở dữ liệu được gọi hello_world_dbbằng lệnh sau:

CREATE DATABASE hello_world_db;

Để xác minh xem bạn đã tạo cơ sở dữ liệu thành công hay chưa, bạn có thể sử dụng lệnh sau:

SHOW DATABASES;

Đầu ra của bạn sẽ tương tự như sau:

+--------------------+
|      Database      |
+--------------------+
| hello_world_db     |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

Sau khi tạo cơ sở dữ liệu mẫu, ngắt kết nối khỏi máy chủ MySQL:

mysql> QUIT

Bây giờ, bạn cần cài đặt một trình điều khiển thủ công cho cơ sở dữ liệu mà bạn lựa chọn. Vì Sequelize chỉ cung cấp các tính năng ORM, nó không bao gồm các trình điều khiển cơ sở dữ liệu tích hợp sẵn. Do đó, bạn sẽ cần cài đặt trình điều khiển theo sở thích của mình. Để làm điều đó, hãy điều hướng đến thư mục dự án bằng cách sử dụng thiết bị đầu cuối và cài đặt trình điều khiển MySQL cho dự án bằng lệnh sau:

npm install --save mysql2

Trong trường hợp này, bạn đang sử dụng trình điều khiển cho MySQL.

Lưu ý: Vì hướng dẫn này sử dụng MySQL làm cơ sở dữ liệu, bạn đang sử dụng trình điều khiển cho điều đó. Tùy thuộc vào cơ sở dữ liệu của bạn, bạn có thể cài đặt trình điều khiển theo cách thủ công như sau:

  • npm install --save pg pg-hstore # Postgres
  • npm install --save mysql2
  • npm install --save mariadb
  • npm install --save sqlite3
  • npm install --save tedious # Microsoft SQL Server

Bây giờ bạn đã có một cơ sở dữ liệu mẫu, bạn có thể tạo ứng dụng Sequelize đầu tiên của mình với khả năng kết nối cơ sở dữ liệu.

Kết nối với Cơ sở dữ liệu MySQL

Trong phần này, bạn sẽ kết nối ứng dụng Node.js với cơ sở dữ liệu MySQL bằng cách sử dụng Sequelize.

Để kết nối với cơ sở dữ liệu, hãy mở server.jsđể chỉnh sửa bằng cách sử dụng nanohoặc trình soạn thảo mã ưa thích của bạn:

nano server.js

Tại đây, bạn sẽ tạo một kết nối cơ sở dữ liệu trong ứng dụng của mình bằng cách sử dụng phiên bản Sequelize. Trong new Sequelize()phương thức, hãy chuyển các tham số máy chủ MySQL và thông tin đăng nhập cơ sở dữ liệu như sau, thay thế DATABASE_USERNAMEDATABASE_PASSWORDbằng thông tin đăng nhập của người dùng MySQL của bạn:

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
 'hello_world_db',
 'DATABASE_USERNAME',
 'DATABASE_PASSWORD',
  {
    host: 'DATABASE_HOST',
    dialect: 'mysql'
  }
);

hostlà nơi máy chủ MySQL được lưu trữ, vì vậy bạn sẽ cần cung cấp URL máy chủ hoặc địa chỉ IP. Nếu bạn đang sử dụng máy chủ MySQL được cài đặt cục bộ, bạn có thể thay thế DATABASE_HOSTbằng localhosthoặc 127.0.0.1dưới dạng giá trị.

Tương tự, nếu bạn đang sử dụng máy chủ từ xa, hãy đảm bảo thay thế các giá trị kết nối cơ sở dữ liệu tương ứng bằng các chi tiết máy chủ từ xa thích hợp.

Lưu ý: Nếu bạn đang sử dụng bất kỳ phần mềm máy chủ cơ sở dữ liệu nào khác, bạn có thể thay thế tham số phương ngữ cho phù hợp. `phương ngữ: 'mysql', 'mariadb', 'postgres', 'mssql'.

Tiếp theo, gọi một phương thức dựa trên lời hứa authenticate() để khởi tạo kết nối cơ sở dữ liệu với ứng dụng. Để làm điều đó, hãy thêm khối mã sau vào server.jstệp của bạn:

...

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Phương authenticate()pháp này được sử dụng để kết nối với cơ sở dữ liệu và kiểm tra xem thông tin xác thực đã cho có chính xác hay không. Ở đây, kết nối cơ sở dữ liệu được mở theo mặc định và kết nối tương tự có thể được sử dụng cho tất cả các truy vấn. Bất cứ khi nào bạn cần đóng kết nối, hãy gọi sequelize.close()phương thức sau authenticate()cuộc gọi này. Để tìm hiểu thêm về Sequelize, vui lòng xem hướng dẫn bắt đầu của họ .

Hầu hết các phương thức được cung cấp bởi Sequelize là không đồng bộ. Điều đó có nghĩa là bạn có thể chạy các quy trình trong ứng dụng của mình trong khi khối mã không đồng bộ đang trong thời gian thực thi. Ngoài ra, sau khi thực thi khối mã không đồng bộ thành công, nó trả về một lời hứa , là giá trị được trả về khi kết thúc quá trình. Do đó, trong các khối mã không đồng bộ, bạn có thể sử dụng then()catch()trả finally()về dữ liệu đã xử lý.

Tại thời điểm này, server.jstệp sẽ giống như sau:

const Sequelize = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Lưu và đóng tệp của bạn.

Trong thư mục dự án, chạy server.jsứng dụng bằng cách chạy lệnh sau:

node server.js

Đầu ra của bạn sẽ như thế này:

Output
Connection has been established successfully!

Bạn đã tạo kết nối cơ sở dữ liệu thành công.

Trong bước này, bạn đã cài đặt Sequelize, tạo cơ sở dữ liệu mẫu và sử dụng Sequelize để kết nối với cơ sở dữ liệu. Tiếp theo, bạn sẽ làm việc với các mô hình trong Sequelize.

Bước 2 - Tạo bảng cơ sở dữ liệu bằng cách sử dụng Sequelize

Bây giờ bạn đã tạo cơ sở dữ liệu MySQL mẫu, bạn có thể sử dụng Sequelize để tạo bảng và điền dữ liệu vào bảng đó. Trong Sequelize, các bảng cơ sở dữ liệu được gọi là mô hình . Mô hình là một trừu tượng đại diện cho một bảng của cơ sở dữ liệu. Mô hình xác định một số thứ để Sắp xếp theo thứ tự, chẳng hạn như tên của bảng, chi tiết cột và kiểu dữ liệu. Trong bước này, bạn sẽ tạo một mô hình Sequelize cho dữ liệu sách.

Để bắt đầu, hãy tạo một tệp mới có tên book.model.jstrong thư mục dự án:

nano book.model.js

Tương tự như bước trước, thêm mã Sequelize để khởi tạo cơ sở dữ liệu với một lần nhập mới DataTypesở đầu tệp:

const { Sequelize, DataTypes } = require("sequelize");

Sequelize chứa nhiều kiểu dữ liệu dựng sẵn. Để truy cập các loại dữ liệu đó, bạn thêm nhập cho DataTypes. Hướng dẫn này đề cập đến một số kiểu dữ liệu được sử dụng thường xuyên, chẳng hạn như STRING, INTEGERDATEONLY. Để tìm hiểu thêm về các kiểu dữ liệu được hỗ trợ khác, bạn có thể tham khảo tài liệu Sequelize chính thức .

Sau đó, bao gồm các dòng bạn đã sử dụng trước đây để tạo kết nối với cơ sở dữ liệu MySQL của bạn, cập nhật thông tin đăng nhập MySQL của bạn cho phù hợp:

...

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Tiếp theo, bạn sẽ tạo một mô hình có tên , booksbao gồm title, và ID. Để làm điều đó, hãy sử dụng phương pháp như được hiển thị:authorrelease_datesubjectsequelize.define()

...

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

Phương sequelize.define()thức xác định một mô hình mới, mô hình này đại diện cho một bảng trong cơ sở dữ liệu. Khối mã này tạo một bảng được gọi và lưu trữ các bản booksghi sách theo dấu title, authorrelease_date.subject

Trong mã này, allowNullcho thấy rằng giá trị cột mô hình không được null. Tương tự như vậy, nếu bạn cần đặt một giá trị như vậy, bạn có thể sử dụng defaultValue: "value".

Tiếp theo, bạn sẽ thêm bookmô hình vào cơ sở dữ liệu của mình. Để làm điều đó, bạn sẽ sử dụng sync()phương pháp như sau:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Trong sync()phương thức này, bạn đang yêu cầu Sequelize thực hiện một vài thao tác với cơ sở dữ liệu. Với lệnh gọi này, Sequelize sẽ tự động thực hiện một truy vấn SQL đến cơ sở dữ liệu và tạo bảng, in thông báo Book table created successfully!.

Như đã đề cập, phương thức sync () là một phương thức dựa trên lời hứa, có nghĩa là nó cũng có thể thực hiện xử lý lỗi. Trong khối mã này, bạn sẽ kiểm tra xem bảng có được tạo thành công hay không. Nếu không, nó sẽ trả về một lỗi thông qua phương thức bắt và in nó trên đầu ra.

Lưu ý: Bạn có thể quản lý đồng bộ hóa mô hình bằng cách chuyển forcecác tham số để buộc tạo một bảng mới nếu nó không tồn tại hoặc sử dụng bảng hiện có. Dưới đây là một số ví dụ có thể hữu ích cho bạn khi làm việc với Sequelize:

  • model.sync(): Điều này tạo ra bảng nếu nó chưa tồn tại.
  • model.sync({ force: true }): Thao tác này tạo bảng bằng cách loại bỏ nó nếu đã tồn tại cùng một bảng.

Mã cuối cùng sẽ giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy ứng dụng của bạn bằng cách sử dụng lệnh sau:

node book.model.js

Bạn sẽ nhận được kết quả sau trong dòng lệnh của mình:

Output
Executing (default): SELECT 1+1 AS result
Executing (default): CREATE TABLE IF NOT EXISTS `books` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255) NOT NULL, `release_date` DATE, `subject` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Connection has been established successfully.
Executing (default): SHOW INDEX FROM `books`
Book table created successfully!

Trong đầu ra, bạn sẽ thấy nhật ký trả về có chứa thông báo , Book table created successfully!. Bạn có thể xác minh điều này bằng cách kiểm tra cơ sở dữ liệu của mình để xem booksbảng mới được tạo trong hello_world_dbcơ sở dữ liệu.

Để xác minh việc tạo bảng mới, hãy đăng nhập vào phiên bản MySQL của bạn:

mysql -u YOUR_USERNAME -p

Sau khi nhập mật khẩu của bạn, hãy thay đổi vào cơ sở dữ liệu mẫu:

USE hello_world_db;

Và sau đó chạy lệnh để hiển thị các bảng:

SHOW TABLES;

Đầu ra của bạn sẽ tương tự như sau:

+---------------------------+
| Tables_in_hello_world_db |
+---------------------------+
| books                     |
+---------------------------+
1 row in set (0.00 sec)

Cuối cùng, ngắt kết nối khỏi máy chủ MySQL:

mysql> QUIT

Bạn đã xác minh rằng việc booktạo mô hình đã thành công. Sử dụng quy trình này, bạn có thể tạo bất kỳ số lượng mô hình nào bằng cách làm theo cùng một quy trình.

Trong bước này, bạn đã tạo một mô hình trong cơ sở dữ liệu và bắt đầu làm việc với một mô hình bằng các phương thức tích hợp sẵn. Bạn cũng đã sử dụng các kiểu dữ liệu hỗ trợ Sequelize để xác định mô hình của mình. Tiếp theo, bạn sẽ làm việc với các truy vấn mô hình cơ bản.

Bước 3 - Sử dụng Sequelize cho các truy vấn cơ sở dữ liệu

Trong bước này, bạn sẽ sử dụng các truy vấn tích hợp sẵn của Sequelize để chèn, chọn, chọn với các mệnh đề điều kiện và xóa.

Chèn bản ghi mới

Trong bước trước, bạn đã tạo một bookmô hình bên trong cơ sở dữ liệu. Trong phần này, bạn sẽ chèn dữ liệu vào mô hình này.

Để bắt đầu, hãy sao chép nội dung của book.model.jsbước trước. Tạo một tệp mới được gọi book.controller.jsđể xử lý logic truy vấn. Thêm mã từ book.model.jsđến book.controller.js.

Trong book.controller.js, xác định vị trí sync()phương thức. Trong sync()phương thức, hãy thêm các dòng được đánh dấu sau:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');

   Book.create({
       title: "Clean Code",
       author: "Robert Cecil Martin",
       release_date: "2021-12-14",
       subject: 3
   }).then(res => {
       console.log(res)
   }).catch((error) => {
       console.error('Failed to create a new record : ', error);
   });

}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Tại đây, bạn chèn một bản ghi sách mới vào booksmô hình bạn đã tạo bằng sync()phương pháp này, hỗ trợ thêm các bản ghi mới vào các mô hình đã tạo trước đó. Khi phương thức sync () thực thi thành công, nó sẽ chạy then()phương thức. Bên trong then()phương thức, bạn gọi create()phương thức để chèn các bản ghi mới vào mô hình.

Bạn sử dụng create()phương thức để chuyển dữ liệu bạn cần thêm vào cơ sở dữ liệu dưới dạng một đối tượng. Phần mã được đánh dấu sẽ chèn một mục mới vào booksbảng hiện có của bạn. Trong ví dụ này, bạn thêm Clean Codetheo Robert Cecil Martin, đã được phân loại với subjectID của 3. Bạn có thể sử dụng cùng một mã, được cập nhật thông tin cho các sách khác, để thêm các bản ghi mới vào cơ sở dữ liệu của bạn.

Lưu và đóng tập tin.

Chạy ứng dụng bằng lệnh sau:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
books {
  dataValues:
   { id: 1,
     title: 'Clean Code',
     author: 'Robert Cecil Martin',
     release_date: '2021-12-14',
     subject: 3,
     updatedAt: 2021-12-14T10:12:16.644Z,
   ...
}

Bạn đã chèn một bản ghi mới vào mô hình bạn đã tạo trong cơ sở dữ liệu. Bạn có thể tiếp tục thêm nhiều bản ghi bằng cách sử dụng cùng một quy trình.

Chọn tất cả các bản ghi

Trong phần này, bạn sẽ chọn và lấy tất cả các hồ sơ sổ sách từ cơ sở dữ liệu bằng findAll()phương pháp. Để làm điều đó, trước tiên hãy mở book.controller.jsvà xóa Book.create()phương thức trước đó. Trong sync()phương thức, thêm Book.findAll()phương thức như được hiển thị:

...

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

    Book.findAll().then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

...

Lưu và đóng tập tin.

Tiếp theo, chạy lại ứng dụng bằng lệnh sau:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
[
  books {
    dataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
    _previousDataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
...
]

Đầu ra chứa tất cả dữ liệu sách dưới dạng một đối tượng mảng. Bạn đã sử dụng thành công phương pháp Sequelize findAll()để trả về tất cả dữ liệu sách từ cơ sở dữ liệu.

Lựa chọn với wheremệnh đề

Trong phần này, bạn sẽ chọn các giá trị có điều kiện bằng wheremệnh đề. Mệnh wheređề được sử dụng để chỉ định một điều kiện trong khi tìm nạp dữ liệu. Đối với hướng dẫn này, bạn sẽ nhận được một cuốn sách theo ID bản ghi cụ thể từ cơ sở dữ liệu bằng cách sử dụng findOne()phương pháp này.

Để làm điều đó, hãy mở book.controller.jsđể chỉnh sửa, xóa findAll()phương thức và thêm các dòng sau:

...

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

    Book.findOne({
        where: {
            id : "1"
        }
    }).then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn chọn một bản ghi sổ cụ thể từ cơ sở dữ liệu bằng cách sử dụng findOne()phương pháp có wheretùy chọn. Trong ví dụ này, bạn đang truy xuất dữ liệu sách có idgiá trị bằng 1.

Lưu và đóng tập tin.

Tiếp theo, chạy ứng dụng:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
books {
  dataValues: {
    id: 1,
    title: 'Clean Code',
    author: 'Robert Cecil Martin',
    release_date: '2020-01-01',
    subject: 'Science',
    createdAt: 2021-02-22T09:13:55.000Z,
    updatedAt: 2021-02-22T09:13:55.000Z
  },
  ...
}

Bạn đã sử dụng thành công wherecác mệnh đề để lấy dữ liệu từ các mô hình Sequelize. Bạn có thể sử dụng wheremệnh đề trong ứng dụng cơ sở dữ liệu để nắm bắt dữ liệu có điều kiện.

Xóa bản ghi

Để xóa một bản ghi cụ thể khỏi mô hình cơ sở dữ liệu, bạn sử dụng destroy()phương pháp với wheretùy chọn. Để làm điều đó, hãy mở book.controller.js, xóa findOne()phương thức và thêm các dòng được đánh dấu sau:

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

  Book.destroy({
      where: {
        id: 2
      }
  }).then(() => {
      console.log("Successfully deleted record.")
  }).catch((error) => {
      console.error('Failed to delete record : ', error);
  });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn xóa một bản ghi sách khỏi cơ sở dữ liệu bằng cách sử dụng destroy()phương pháp có wheretùy chọn và chuyển vào bản idghi sách để xóa. Bạn sẽ xóa hồ sơ sổ sách có số idbằng 2.

Lưu và đóng tập tin.

Tiếp theo, chạy ứng dụng:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
Successfully deleted record.

Bản ghi đã bị xóa.

Trong bước này, bạn đã thử nghiệm với mô hình cơ sở dữ liệu và truy vấn mô hình của mình. Bạn đã khởi tạo cơ sở dữ liệu, tạo mô hình, chèn bản ghi, bản ghi đã truy xuất, bản ghi được truy xuất với các điều kiện bằng cách sử dụng wheremệnh đề và xóa bản ghi đã chọn. Với kiến ​​thức này về Sequelize, bây giờ bạn sẽ tạo các liên kết trong Sequelize. Sau đó, bạn sẽ có thể xác định và làm việc với nhiều mối quan hệ khác nhau bằng cách sử dụng các mô hình Sequelize.

Bước 4 - Tạo liên kết bằng cách sử dụng Sequelize

Trong bước này, bạn sẽ sử dụng các kiểu liên kết tiêu chuẩn mà Sequelize hỗ trợ: liên kết một-một , một-nhiềunhiều-nhiều . Bạn sẽ sử dụng dữ liệu mẫu về sinh viên, khóa học và cấp lớp.

Sequelize sử dụng các kiểu kết hợp dựa trên các mối quan hệ cơ sở dữ liệu sau:

mối quan hệ một-một : Mối quan hệ một-một có nghĩa là một bản ghi trong một bảng được liên kết với chính xác một bản ghi trong một bảng khác. Về Sequelize, bạn có thể sử dụngbelongsTo()hasOne()các liên kết để tạo ra loại mối quan hệ này.

mối quan hệ một -nhiều : Mối quan hệ một-nhiều có nghĩa là một bản ghi trong một bảng được liên kết với nhiều bản ghi trong một bảng khác. Với Sequelize, bạn có thể sử dụnghasMany()các phương thức kết hợp để tạo kiểu quan hệ này.

Mối quan hệ nhiều-nhiều : Mối quan hệ nhiều-nhiều có nghĩa là nhiều bản ghi trong một bảng được liên kết với nhiều bản ghi trong bảng khác. Với Sequelize, bạn có thể sử dụngbelongsToMany()các liên kết để tạo loại mối quan hệ này.

Trước khi tạo các liên kết này, trước tiên bạn sẽ tạo một cơ sở dữ liệu mới được gọi là student_dbvà thêm các mô hình mới và một số dữ liệu mẫu cho sinh viên, khóa học và cấp lớp.

Để tạo cơ sở dữ liệu, hãy làm theo quy trình tương tự trong Bước 1 - Cài đặt và cấu hình Sequelize để đăng nhập vào MySQL và tạo cơ sở dữ liệu được gọi student_db. Khi cơ sở dữ liệu mới đã được tạo, hãy đăng xuất khỏi MySQL. Tiếp theo, bạn sẽ bắt đầu tạo các liên kết cơ sở dữ liệu.

Tạo mối quan hệ 1-1 vớibelongsTo()

Trong phần này, bạn sẽ tạo mối quan hệ 1-1 bằng cách sử dụng mô hình Sequelize. Hãy tưởng tượng bạn muốn nhận thông tin chi tiết của một học sinh cùng với cấp lớp của họ. Vì một học sinh chỉ có thể có một cấp lớp, nên kiểu liên kết này là mối quan hệ một-một và bạn có thể sử dụng belongsTo()phương pháp này.

Lưu ý: Có sự khác biệt giữa belongsTo()hasOne(). belongsTo()sẽ thêm foreignKeyvào bảng nguồn, trong khi hasOne()sẽ thêm nó vào bảng đích. Trong mọi trường hợp, nếu cả hai mối quan hệ được sử dụng cùng một lúc, nó sẽ hoạt động như Trình tự hóa các mối quan hệ một đối một hai chiều.

Phương belongsTo()pháp này cho phép bạn tạo mối quan hệ 1-1 giữa hai mô hình Sequelize. Trong ví dụ này, bạn đang sử dụng các mô hình StudentGrade.

Tạo một tệp mới có tên one_to_one.js. Như bạn đã làm trong phần trước, Kết nối với Cơ sở dữ liệu MySQL , bao gồm các dòng để tạo kết nối với cơ sở dữ liệu và xác thực người dùng MySQL của bạn ở đầu tệp. Đảm bảo cập nhật thông tin đăng nhập MySQL nếu cần:

const { Sequelize, DataTypes } = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Trong phần này, bạn sẽ tạo ba mô hình trong student_dbcơ sở dữ liệu Studentmới :, GradeCourse. Bạn sẽ bắt đầu bằng cách tạo StudentGradecác mô hình. Sau đó trong bước này, bạn sẽ tạo Coursesmô hình.

Đối với Studentmô hình, hãy thêm khối mã sau vào one_to_one.js:

...
const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

Mô hình sinh viên này chứa hai cột: student_idname.

Tiếp theo, thêm một khối mã cho Grademô hình:

...
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

Gradehình chứa cột grade.

Để chứng minh các liên kết, bạn sẽ cần thêm dữ liệu mẫu vào cơ sở dữ liệu. Đối với điều đó, bạn sẽ sử dụng bulk()phương pháp này. Thay vì chèn dữ liệu vào từng hàng một, bulkCreate()phương pháp này cho phép bạn chèn nhiều hàng vào các mô hình cơ sở dữ liệu của mình cùng một lúc.

Vì vậy, bây giờ, hãy nhập GradeStudentdữ liệu vào các mô hình tương ứng của chúng trong cơ sở dữ liệu như được hiển thị:

...
const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           …
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Tại đây, bạn cung cấp dữ liệu mẫu và nhập dữ liệu vào mô hình StudentGrade. Với cơ sở dữ liệu, mô hình và dữ liệu mẫu của bạn, bạn đã sẵn sàng tạo các liên kết.

Trong one-to-one.js, thêm dòng sau vào bên dưới student_datakhối:

...
Student.belongsTo(Grade);

Tiếp theo, bạn sẽ cần kiểm tra xem liên kết có hoạt động bình thường hay không. Để làm điều đó, bạn có thể truy xuất tất cả dữ liệu của học sinh với các cấp lớp liên quan bằng cách chuyển includetham số vào bên trong findAll()phương thức.

Vì bạn cần đạt được cấp độ học sinh nên bạn sẽ vượt qua Gradenhư người mẫu. Trong sequelize.sync()phương thức, hãy thêm các dòng được đánh dấu như được hiển thị:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Mã hoàn chỉnh trông giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );
sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-One association
Student.belongsTo(Grade);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy tệp bằng cách sử dụng lệnh sau:

node one_to_one.js

Đầu ra sẽ dài và bạn sẽ thấy tất cả dữ liệu của học sinh với các cấp lớp. Đây là một đoạn mã của kết quả hiển thị dữ liệu sinh viên:

Output
students {
    dataValues:
   { student_id: '3e786a8f-7f27-4c59-8e9c-a8c606892288',
       name: 'Sam Lewis',
       createdAt: 2021-12-16T08:49:38.000Z,
       updatedAt: 2021-12-16T08:49:38.000Z,
       gradeId: 1,
       grade: [grades] },
    _previousDataValues:
...

Tùy thuộc vào công cụ dòng lệnh bạn đang sử dụng, đầu ra có thể in ra dưới dạng dạng xem mở rộng hoặc không. Nếu nó là một dạng xem được mở rộng, nó sẽ in gradeđối tượng được mở rộng làm đầu ra.

Trong phần này, bạn đã tạo mối quan hệ một đối một bằng cách sử dụng lệnh Student.belongsTo(Grade);gọi phương thức và nhận thông tin chi tiết theo liên kết bạn đã tạo.

Tạo mối quan hệ một-nhiều vớihasMany()

Trong phần này, bạn sẽ tạo mối quan hệ một-nhiều bằng cách sử dụng mô hình Sequelize. Hãy tưởng tượng bạn muốn có tất cả học sinh được liên kết với một cấp lớp đã chọn. Vì một cấp lớp cụ thể có thể có nhiều học sinh, đây là mối quan hệ một-nhiều.

Để bắt đầu, hãy sao chép nội dung của one_to_one.jsvào một tệp mới có tên one_to_many.js. Trong one_to_many.js, loại bỏ các dòng sau student_datakhối. Tệp của bạn one_to_many.jssẽ trông như thế này:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

Sau student_datakhối, hãy sử dụng hasMany()phương thức để tạo mối quan hệ mới:

...
Grade.hasMany(Student)

Phương hasMany()pháp này cho phép bạn tạo mối quan hệ một-nhiều giữa hai mô hình Sequelize. Ở đây, bạn đang sử dụng GradeStudentcác mô hình.

Tiếp theo, thêm sequelize.sync()phương thức với findAll()phương thức bên dưới hasMany()dòng:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Ở đây, bạn đang cố gắng truy cập vào tất cả học sinh trong một cấp lớp cụ thể — trong trường hợp này là tất cả học sinh trong lớp 9. Bạn cũng đã thêm Studentmô hình trong includetùy chọn.

Đây là mã hoàn chỉnh:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-Many relationship
Grade.hasMany(Student);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy tệp bằng lệnh sau:

node one_to_many.js

Đầu ra sẽ tương tự như sau. Sẽ khá lâu nhưng tất cả học sinh trong lớp 9sẽ được trả về như sau:

Output
[ grades {
    dataValues:
     { id: 1,
       grade: 9,
       createdAt: 2021-12-20T05:12:31.000Z,
       updatedAt: 2021-12-20T05:12:31.000Z,
       students:
        [ students {
            dataValues:
             { student_id: '8a648756-4e22-4bc0-8227-f590335f9965',
               name: 'Sam Lewis',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...
          students {
            dataValues:
             { student_id: 'f0304585-91e5-4efc-bdca-501b3dc77ee5',
               name: 'Max Butler',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...

Trong phần này, bạn đã tạo mối quan hệ một-nhiều bằng cách Grade.hasMany(Student);gọi phương thức. Trong đầu ra, bạn truy xuất các chi tiết theo liên kết mà bạn đã tạo.

Tạo ra nhiều mối quan hệ vớibelongsToMany()

Trong phần này, bạn sẽ tạo mối quan hệ nhiều-nhiều bằng cách sử dụng mô hình Sequelize. Ví dụ, hãy tưởng tượng một tình huống mà sinh viên đăng ký vào các khóa học. Một học viên có thể đăng ký nhiều khóa học và một khóa học có thể có nhiều học viên. Đây là một mối quan hệ nhiều-nhiều. Để thực hiện điều này bằng cách sử dụng Sequelize, bạn sẽ sử dụng các mô hình StudentCoursephương StudentCoursepháp belongsToMany().

Để bắt đầu, hãy tạo một tệp được gọi many_to_many.jsvà thêm các khối mã xác thực và khởi tạo cơ sở dữ liệu như sau. (Bạn có thể sử dụng lại các khối mã từ one_to_many.jsví dụ trước.) Đảm bảo cập nhật các giá trị kết nối cơ sở dữ liệu được đánh dấu nếu cần.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Tiếp theo, bạn sẽ tạo các mô hình cơ sở dữ liệu cho các mối quan hệ nhiều-nhiều: StudentCourse. Sau đó, bạn sẽ thêm một số dữ liệu mẫu vào các mô hình đó.

...

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Tại đây, bạn tạo StudentCoursecác mô hình và cung cấp một số dữ liệu mẫu. Bạn cũng đặt a courseID, mà bạn sẽ sử dụng để truy xuất học sinh theo kiểu quan hệ này.

Cuối cùng, bạn đã xác định một mô hình mới được gọi là StudentCourse, mô hình này quản lý dữ liệu mối quan hệ giữa StudentCourse. Trong ví dụ này, studentId 1được đăng ký courseId 1courseId 2.

Bạn đã hoàn thành việc khởi tạo cơ sở dữ liệu và thêm dữ liệu mẫu vào cơ sở dữ liệu. Tiếp theo, tạo mối quan hệ nhiều-nhiều bằng belongsToMany()phương pháp như được hiển thị:

...
Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

Trong belongsToMany()phương thức, bạn chuyển throughcấu hình với tên của mô hình làm tùy chọn cấu hình. Trong trường hợp này, nó là StudentCourse. Đây là bảng quản lý các mối quan hệ nhiều-nhiều.

Cuối cùng, bạn có thể kiểm tra xem liên kết có hoạt động bình thường hay không bằng cách truy xuất tất cả dữ liệu khóa học với các sinh viên được liên kết. Bạn sẽ làm điều đó bằng cách chuyển includetham số vào bên trong findAll()phương thức. Thêm các dòng sau vào many_to_many.js:

...
sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Mã hoàn chỉnh trông giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
    },
    name: {
       type: DataTypes.STRING,
       allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Lưu và đóng tập tin.

Chạy tệp bằng lệnh sau:

node many_to_many.js

Đầu ra sẽ dài, nhưng sẽ trông giống như sau:

Output[ courses {
    dataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _changed: Set {},
    _options:
     { isNewRecord: false,
       _schema: null,
       _schemaDelimiter: '',
       include: [Array],
       includeNames: [Array],
       includeMap: [Object],
       includeValidated: true,
       attributes: [Array],
       raw: true },
    isNewRecord: false,
    students: [ [students], [students] ] },
  courses {
    dataValues:
     { id: 2,
       course_name: 'Maths',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
...

Như bạn có thể thấy trong đầu ra này, các khóa học có sinh viên liên quan đã được truy xuất. Trong courseskhối, bạn sẽ thấy các idgiá trị riêng biệt cho biết từng khóa học. Ví dụ: id: 1được kết nối với lớp course_name: Sciencedành cho Khoa học, trong khi id: 2lớp Toán, v.v.

Trong cơ sở dữ liệu, bạn có thể thấy ba bảng được tạo với dữ liệu mẫu mà bạn đã chèn.

Trong bước này, bạn đã sử dụng Sequelize để tạo các liên kết một-một, một-nhiều và nhiều-nhiều. Tiếp theo, bạn sẽ làm việc với các truy vấn thô.

Bước 5 - Làm việc với các truy vấn thô

Trong bước này, bạn sẽ làm việc với các truy vấn thô trong Sequelize. Trong các bước trước, bạn đã sử dụng các phương thức tích hợp sẵn của Sequelize, chẳng hạn như insert()findAll(), để xử lý việc chèn và chọn dữ liệu từ cơ sở dữ liệu. Bạn có thể nhận thấy rằng các phương pháp đó tuân theo một mẫu cụ thể để viết một truy vấn. Tuy nhiên, với việc sử dụng các truy vấn thô, bạn không cần phải lo lắng về các phương thức và mẫu tích hợp sẵn của Sequelize. Sử dụng kiến ​​thức của bạn về các truy vấn SQL, bạn có thể thực hiện một loạt các truy vấn trong Sequelize từ đơn giản đến nâng cao hơn.

Dưới đây là một ví dụ về các truy vấn thô thực hiện hành động chọn tất cả các giá trị từ một bảng cụ thể, xóa các giá trị đã chọn theo điều kiện và cập nhật bảng với các giá trị đã cho.

SELECT * FROM table_name;
DELETE FROM table_name WHERE condition;
UPDATE table_name SET y = 42 WHERE x = 12;

Trong Sequelize, các truy vấn thô có thể được sử dụng với hai phương pháp chủ yếu: thay thế mảng và thay thế đối tượng. Khi bạn đang chuyển các giá trị cho truy vấn SQL, bạn có thể sử dụng một mảng hoặc một đối tượng để thực hiện việc thay thế đó.

Trước khi viết một truy vấn thô, trước tiên bạn cần cung cấp dữ liệu sinh viên trong cơ sở dữ liệu mẫu. Tiếp theo phần trước, Tạo cơ sở dữ liệu mẫu , đăng nhập vào MySQL, tạo cơ sở dữ liệu được gọi sample_student_dbvà đăng xuất khỏi MySQL.

Tiếp theo, bạn sẽ thêm một số dữ liệu thô để bắt đầu làm việc với các truy vấn thô. Tạo một tệp mới được gọi add_student_records.jsvà thêm các khối mã sau, chứa các phương thức Sequelize đã được thảo luận trước đây về authenticate(), sync()bulkCreate().

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const student_data = [
    {name : "John Baker"},
    {name : "Max Butler"},
    {name : "Ryan Fisher"},
    {name : "Robert Gray"},
    {name : "Sam Lewis"}
]

sequelize.sync({ force: true }).then(() => {

    Student.bulkCreate(student_data, { validate: true }).then((result) => {
        console.log(result);
    }).catch((error) => {
        console.log(error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn bắt đầu kết nối cơ sở dữ liệu, tạo mô hình và chèn một vài hồ sơ sinh viên vào bên trong cơ sở dữ liệu mới.

Lưu và đóng tập tin.

Tiếp theo, chạy tập lệnh này bằng lệnh sau:

node add_student_records.js

Đầu ra sẽ tương tự như sau. Nó sẽ khá dài, nhưng tất cả các hồ sơ học sinh mà bạn đã chèn sẽ được trả về như sau. Lưu ý rằng vì giá trị student_idUUID ( Số nhận dạng duy nhất phổ biến ) được tạo tự động nên giá trị này sẽ khác nhau tùy thuộc vào người dùng.

Output
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `students`;
Connection has been established successfully.
Executing (default): DROP TABLE IF EXISTS `students`;
Executing (default): CREATE TABLE IF NOT EXISTS `students` (`student_id` CHAR(36) BINARY , `name` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`student_id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `students`
Executing (default): INSERT INTO `students` (`student_id`,`name`,`createdAt`,`updatedAt`) VALUES ('45d1f26c-ba76-431f-ac5f-f41282351710','John Baker','2022-06-03 07:27:49','2022-06-03 07:27:49'),('1cb4e34d-bfcf-4a97-9624-e400b9a1a5f2','Max Butler','2022-06-03 07:27:49','2022-06-03 07:27:49'),('954c576b-ba1c-4dbc-a5c6-8eaf22bbbb04','Ryan Fisher','2022-06-03 07:27:49','2022-06-03 07:27:49'),('e0f15cd3-0025-4032-bfe8-774e38e14c5f','Robert Gray','2022-06-03 07:27:49','2022-06-03 07:27:49'),('826a0ec9-edd0-443f-bb12-068235806659','Sam Lewis','2022-06-03 07:27:49','2022-06-03 07:27:49');
[
  students {
    dataValues: {
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710'`,
      name: 'John Baker',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },
    _previousDataValues: {
      name: 'John Baker',
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },

…

Trong phần tiếp theo, bạn sẽ áp dụng các truy vấn thô bằng cách sử dụng một trong các student_idkết quả đầu ra trong khối mã ở trên. Sao chép nó xuống để bạn có nó cho các phần tiếp theo, nơi bạn sẽ sử dụng query()phương thức để thay thế mảng và đối tượng.

Thay thế mảng

Trong phần này, bạn sẽ sử dụng query()phương thức để thay thế mảng. Với phương pháp này, Sequelize có thể thực thi các truy vấn SQL thô hoặc đã được chuẩn bị sẵn.

Để bắt đầu, hãy sao chép nội dung của server.jstệp từ Bước 1 , vì nó bao gồm Sequelize()phương thức khởi tạo và khởi tạo cơ sở dữ liệu. Dán nội dung vào một tệp mới có tên array_raw_query.js. Cập nhật tên cơ sở dữ liệu thành sample_student_db:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Ở cuối tệp, hãy thêm khối mã sau để thay thế mảng, đảm bảo thay thế REPLACE_STUDENT_IDbằng student_idgiá trị mà bạn đã sao chép trong phần trước.

...
sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Để thay thế mảng, bạn truyền query()phương thức với truy vấn SQL và đối tượng cấu hình. Nó chứa replacementsgiá trị và kiểu. Để thay thế, bạn chuyển dữ liệu dưới dạng một mảng và bắt các giá trị đó bằng ?biểu tượng dấu hỏi chấm ().

Tiếp theo, vì bạn cần lấy dữ liệu về một học sinh cụ thể, nên giá trị student_idsẽ được chuyển làm tham số thứ hai. Sau đó, bạn chuyển type: sequelize.QueryTypes.SELECTcặp khóa-giá trị mà bạn có thể sử dụng để chọn dữ liệu từ cơ sở dữ liệu.

Ngoài ra còn có một số loại khác, chẳng hạn như QueryTypes.UPDATEQueryTypes.DELETE. Tùy theo yêu cầu mà bạn có thể lựa chọn loại phù hợp với mục đích của mình.

Sau đây là toàn bộ khối mã. Tại đây bạn kết nối với cơ sở dữ liệu và truy xuất dữ liệu sinh viên đã chọn bằng truy vấn thô.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Lưu và đóng tệp của bạn.

Tiếp theo, bạn có thể chạy tập lệnh này bằng lệnh sau:

node array_raw_query.js

Bạn sẽ thấy đầu ra tương tự như sau:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

Do đã chọn student_id, giá trị đầu ra của bạn có thể khác nhau.

Thay thế đối tượng

Nhìn bề ngoài, thay thế đối tượng tương tự như thay thế mảng, nhưng mô hình truyền dữ liệu đến truy vấn thô là khác. Trong tùy chọn thay thế, bạn chuyển dữ liệu dưới dạng một đối tượng và trong tùy chọn truy vấn, bạn sử dụng các giá trị như :key.

Để bắt đầu, hãy tạo một tệp mới có tên object_raw_query.jsvà dán các khối mã hoàn chỉnh từ server.jstệp, cập nhật cơ sở dữ liệu lên sample_student_db.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Sau đó, thêm khối mã sau vào cuối object_raw_query.jstệp mới:

...
sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Tại đây, bạn nhận được dữ liệu sinh viên đã chọn bằng cách sử dụng phương pháp thay thế đối tượng. Bạn tạo một replacementđối tượng, đặt làm thông tin sinh viên mà bạn idmuốn lấy:.{ id: 'REPLACE_STUDENT_ID' }

Trong , bạn chỉ ra query():. 'SELECT * FROM students WHERE student_id = :id'Sử dụng query()phương thức này, bạn chuyển giá trị thay thế dưới dạng một đối tượng, đó là lý do tại sao phương thức này được gọi là thay thế đối tượng.

Đây là mã hoàn chỉnh:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Lưu và đóng tập tin.

Tiếp theo, chạy tập lệnh này bằng lệnh sau:

node object_raw_query.js

Đầu ra sẽ giống như sau:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

Do đã chọn student_id, giá trị đầu ra của bạn có thể khác nhau.

Trong bước này, bạn đã làm việc với Chuỗi truy vấn thô bằng cách sử dụng hai phương pháp khác nhau: thay thế mảng và thay thế đối tượng.

Sự kết luận

Trong hướng dẫn này, bạn đã cài đặt và định cấu hình Sequelize. Bạn cũng đã tạo và làm việc với các mô hình, đây là một trong những thành phần bắt buộc của Sequelize. Cuối cùng, bạn đã tạo các kiểu liên kết khác nhau và làm việc với các truy vấn thô bằng cách sử dụng các ví dụ thực tế.

Tiếp theo, bạn có thể sử dụng các kiểu dữ liệu khác nhau để tạo các mô hình cơ sở dữ liệu. Bạn cũng có thể cập nhật và xóa bản ghi trong cơ sở dữ liệu bằng cả phương thức tích hợp sẵn và truy vấn thô.

Nguồn bài viết gốc tại https://www.digitalocean.com

#sequelize #node #mysql #database 

What is GEEK

Buddha Community

Cách sử dụng Sequelize với Node.js và MySQL

NBB: Ad-hoc CLJS Scripting on Node.js

Nbb

Not babashka. Node.js babashka!?

Ad-hoc CLJS scripting on Node.js.

Status

Experimental. Please report issues here.

Goals and features

Nbb's main goal is to make it easy to get started with ad hoc CLJS scripting on Node.js.

Additional goals and features are:

  • Fast startup without relying on a custom version of Node.js.
  • Small artifact (current size is around 1.2MB).
  • First class macros.
  • Support building small TUI apps using Reagent.
  • Complement babashka with libraries from the Node.js ecosystem.

Requirements

Nbb requires Node.js v12 or newer.

How does this tool work?

CLJS code is evaluated through SCI, the same interpreter that powers babashka. Because SCI works with advanced compilation, the bundle size, especially when combined with other dependencies, is smaller than what you get with self-hosted CLJS. That makes startup faster. The trade-off is that execution is less performant and that only a subset of CLJS is available (e.g. no deftype, yet).

Usage

Install nbb from NPM:

$ npm install nbb -g

Omit -g for a local install.

Try out an expression:

$ nbb -e '(+ 1 2 3)'
6

And then install some other NPM libraries to use in the script. E.g.:

$ npm install csv-parse shelljs zx

Create a script which uses the NPM libraries:

(ns script
  (:require ["csv-parse/lib/sync$default" :as csv-parse]
            ["fs" :as fs]
            ["path" :as path]
            ["shelljs$default" :as sh]
            ["term-size$default" :as term-size]
            ["zx$default" :as zx]
            ["zx$fs" :as zxfs]
            [nbb.core :refer [*file*]]))

(prn (path/resolve "."))

(prn (term-size))

(println (count (str (fs/readFileSync *file*))))

(prn (sh/ls "."))

(prn (csv-parse "foo,bar"))

(prn (zxfs/existsSync *file*))

(zx/$ #js ["ls"])

Call the script:

$ nbb script.cljs
"/private/tmp/test-script"
#js {:columns 216, :rows 47}
510
#js ["node_modules" "package-lock.json" "package.json" "script.cljs"]
#js [#js ["foo" "bar"]]
true
$ ls
node_modules
package-lock.json
package.json
script.cljs

Macros

Nbb has first class support for macros: you can define them right inside your .cljs file, like you are used to from JVM Clojure. Consider the plet macro to make working with promises more palatable:

(defmacro plet
  [bindings & body]
  (let [binding-pairs (reverse (partition 2 bindings))
        body (cons 'do body)]
    (reduce (fn [body [sym expr]]
              (let [expr (list '.resolve 'js/Promise expr)]
                (list '.then expr (list 'clojure.core/fn (vector sym)
                                        body))))
            body
            binding-pairs)))

Using this macro we can look async code more like sync code. Consider this puppeteer example:

(-> (.launch puppeteer)
      (.then (fn [browser]
               (-> (.newPage browser)
                   (.then (fn [page]
                            (-> (.goto page "https://clojure.org")
                                (.then #(.screenshot page #js{:path "screenshot.png"}))
                                (.catch #(js/console.log %))
                                (.then #(.close browser)))))))))

Using plet this becomes:

(plet [browser (.launch puppeteer)
       page (.newPage browser)
       _ (.goto page "https://clojure.org")
       _ (-> (.screenshot page #js{:path "screenshot.png"})
             (.catch #(js/console.log %)))]
      (.close browser))

See the puppeteer example for the full code.

Since v0.0.36, nbb includes promesa which is a library to deal with promises. The above plet macro is similar to promesa.core/let.

Startup time

$ time nbb -e '(+ 1 2 3)'
6
nbb -e '(+ 1 2 3)'   0.17s  user 0.02s system 109% cpu 0.168 total

The baseline startup time for a script is about 170ms seconds on my laptop. When invoked via npx this adds another 300ms or so, so for faster startup, either use a globally installed nbb or use $(npm bin)/nbb script.cljs to bypass npx.

Dependencies

NPM dependencies

Nbb does not depend on any NPM dependencies. All NPM libraries loaded by a script are resolved relative to that script. When using the Reagent module, React is resolved in the same way as any other NPM library.

Classpath

To load .cljs files from local paths or dependencies, you can use the --classpath argument. The current dir is added to the classpath automatically. So if there is a file foo/bar.cljs relative to your current dir, then you can load it via (:require [foo.bar :as fb]). Note that nbb uses the same naming conventions for namespaces and directories as other Clojure tools: foo-bar in the namespace name becomes foo_bar in the directory name.

To load dependencies from the Clojure ecosystem, you can use the Clojure CLI or babashka to download them and produce a classpath:

$ classpath="$(clojure -A:nbb -Spath -Sdeps '{:aliases {:nbb {:replace-deps {com.github.seancorfield/honeysql {:git/tag "v2.0.0-rc5" :git/sha "01c3a55"}}}}}')"

and then feed it to the --classpath argument:

$ nbb --classpath "$classpath" -e "(require '[honey.sql :as sql]) (sql/format {:select :foo :from :bar :where [:= :baz 2]})"
["SELECT foo FROM bar WHERE baz = ?" 2]

Currently nbb only reads from directories, not jar files, so you are encouraged to use git libs. Support for .jar files will be added later.

Current file

The name of the file that is currently being executed is available via nbb.core/*file* or on the metadata of vars:

(ns foo
  (:require [nbb.core :refer [*file*]]))

(prn *file*) ;; "/private/tmp/foo.cljs"

(defn f [])
(prn (:file (meta #'f))) ;; "/private/tmp/foo.cljs"

Reagent

Nbb includes reagent.core which will be lazily loaded when required. You can use this together with ink to create a TUI application:

$ npm install ink

ink-demo.cljs:

(ns ink-demo
  (:require ["ink" :refer [render Text]]
            [reagent.core :as r]))

(defonce state (r/atom 0))

(doseq [n (range 1 11)]
  (js/setTimeout #(swap! state inc) (* n 500)))

(defn hello []
  [:> Text {:color "green"} "Hello, world! " @state])

(render (r/as-element [hello]))

Promesa

Working with callbacks and promises can become tedious. Since nbb v0.0.36 the promesa.core namespace is included with the let and do! macros. An example:

(ns prom
  (:require [promesa.core :as p]))

(defn sleep [ms]
  (js/Promise.
   (fn [resolve _]
     (js/setTimeout resolve ms))))

(defn do-stuff
  []
  (p/do!
   (println "Doing stuff which takes a while")
   (sleep 1000)
   1))

(p/let [a (do-stuff)
        b (inc a)
        c (do-stuff)
        d (+ b c)]
  (prn d))
$ nbb prom.cljs
Doing stuff which takes a while
Doing stuff which takes a while
3

Also see API docs.

Js-interop

Since nbb v0.0.75 applied-science/js-interop is available:

(ns example
  (:require [applied-science.js-interop :as j]))

(def o (j/lit {:a 1 :b 2 :c {:d 1}}))

(prn (j/select-keys o [:a :b])) ;; #js {:a 1, :b 2}
(prn (j/get-in o [:c :d])) ;; 1

Most of this library is supported in nbb, except the following:

  • destructuring using :syms
  • property access using .-x notation. In nbb, you must use keywords.

See the example of what is currently supported.

Examples

See the examples directory for small examples.

Also check out these projects built with nbb:

API

See API documentation.

Migrating to shadow-cljs

See this gist on how to convert an nbb script or project to shadow-cljs.

Build

Prequisites:

  • babashka >= 0.4.0
  • Clojure CLI >= 1.10.3.933
  • Node.js 16.5.0 (lower version may work, but this is the one I used to build)

To build:

  • Clone and cd into this repo
  • bb release

Run bb tasks for more project-related tasks.

Download Details:
Author: borkdude
Download Link: Download The Source Code
Official Website: https://github.com/borkdude/nbb 
License: EPL-1.0

#node #javascript

Hire Dedicated Node.js Developers - Hire Node.js Developers

If you look at the backend technology used by today’s most popular apps there is one thing you would find common among them and that is the use of NodeJS Framework. Yes, the NodeJS framework is that effective and successful.

If you wish to have a strong backend for efficient app performance then have NodeJS at the backend.

WebClues Infotech offers different levels of experienced and expert professionals for your app development needs. So hire a dedicated NodeJS developer from WebClues Infotech with your experience requirement and expertise.

So what are you waiting for? Get your app developed with strong performance parameters from WebClues Infotech

For inquiry click here: https://www.webcluesinfotech.com/hire-nodejs-developer/

Book Free Interview: https://bit.ly/3dDShFg

#hire dedicated node.js developers #hire node.js developers #hire top dedicated node.js developers #hire node.js developers in usa & india #hire node js development company #hire the best node.js developers & programmers

Aria Barnes

Aria Barnes

1622719015

Why use Node.js for Web Development? Benefits and Examples of Apps

Front-end web development has been overwhelmed by JavaScript highlights for quite a long time. Google, Facebook, Wikipedia, and most of all online pages use JS for customer side activities. As of late, it additionally made a shift to cross-platform mobile development as a main technology in React Native, Nativescript, Apache Cordova, and other crossover devices. 

Throughout the most recent couple of years, Node.js moved to backend development as well. Designers need to utilize a similar tech stack for the whole web project without learning another language for server-side development. Node.js is a device that adjusts JS usefulness and syntax to the backend. 

What is Node.js? 

Node.js isn’t a language, or library, or system. It’s a runtime situation: commonly JavaScript needs a program to work, however Node.js makes appropriate settings for JS to run outside of the program. It’s based on a JavaScript V8 motor that can run in Chrome, different programs, or independently. 

The extent of V8 is to change JS program situated code into machine code — so JS turns into a broadly useful language and can be perceived by servers. This is one of the advantages of utilizing Node.js in web application development: it expands the usefulness of JavaScript, permitting designers to coordinate the language with APIs, different languages, and outside libraries.

What Are the Advantages of Node.js Web Application Development? 

Of late, organizations have been effectively changing from their backend tech stacks to Node.js. LinkedIn picked Node.js over Ruby on Rails since it took care of expanding responsibility better and decreased the quantity of servers by multiple times. PayPal and Netflix did something comparative, just they had a goal to change their design to microservices. We should investigate the motivations to pick Node.JS for web application development and when we are planning to hire node js developers. 

Amazing Tech Stack for Web Development 

The principal thing that makes Node.js a go-to environment for web development is its JavaScript legacy. It’s the most well known language right now with a great many free devices and a functioning local area. Node.js, because of its association with JS, immediately rose in ubiquity — presently it has in excess of 368 million downloads and a great many free tools in the bundle module. 

Alongside prevalence, Node.js additionally acquired the fundamental JS benefits: 

  • quick execution and information preparing; 
  • exceptionally reusable code; 
  • the code is not difficult to learn, compose, read, and keep up; 
  • tremendous asset library, a huge number of free aides, and a functioning local area. 

In addition, it’s a piece of a well known MEAN tech stack (the blend of MongoDB, Express.js, Angular, and Node.js — four tools that handle all vital parts of web application development). 

Designers Can Utilize JavaScript for the Whole Undertaking 

This is perhaps the most clear advantage of Node.js web application development. JavaScript is an unquestionable requirement for web development. Regardless of whether you construct a multi-page or single-page application, you need to know JS well. On the off chance that you are now OK with JavaScript, learning Node.js won’t be an issue. Grammar, fundamental usefulness, primary standards — every one of these things are comparable. 

In the event that you have JS designers in your group, it will be simpler for them to learn JS-based Node than a totally new dialect. What’s more, the front-end and back-end codebase will be basically the same, simple to peruse, and keep up — in light of the fact that they are both JS-based. 

A Quick Environment for Microservice Development 

There’s another motivation behind why Node.js got famous so rapidly. The environment suits well the idea of microservice development (spilling stone monument usefulness into handfuls or many more modest administrations). 

Microservices need to speak with one another rapidly — and Node.js is probably the quickest device in information handling. Among the fundamental Node.js benefits for programming development are its non-obstructing algorithms.

Node.js measures a few demands all at once without trusting that the first will be concluded. Many microservices can send messages to one another, and they will be gotten and addressed all the while. 

Versatile Web Application Development 

Node.js was worked in view of adaptability — its name really says it. The environment permits numerous hubs to run all the while and speak with one another. Here’s the reason Node.js adaptability is better than other web backend development arrangements. 

Node.js has a module that is liable for load adjusting for each running CPU center. This is one of numerous Node.js module benefits: you can run various hubs all at once, and the environment will naturally adjust the responsibility. 

Node.js permits even apportioning: you can part your application into various situations. You show various forms of the application to different clients, in light of their age, interests, area, language, and so on. This builds personalization and diminishes responsibility. Hub accomplishes this with kid measures — tasks that rapidly speak with one another and share a similar root. 

What’s more, Node’s non-hindering solicitation handling framework adds to fast, letting applications measure a great many solicitations. 

Control Stream Highlights

Numerous designers consider nonconcurrent to be one of the two impediments and benefits of Node.js web application development. In Node, at whatever point the capacity is executed, the code consequently sends a callback. As the quantity of capacities develops, so does the number of callbacks — and you end up in a circumstance known as the callback damnation. 

In any case, Node.js offers an exit plan. You can utilize systems that will plan capacities and sort through callbacks. Systems will associate comparable capacities consequently — so you can track down an essential component via search or in an envelope. At that point, there’s no compelling reason to look through callbacks.

 

Final Words

So, these are some of the top benefits of Nodejs in web application development. This is how Nodejs is contributing a lot to the field of web application development. 

I hope now you are totally aware of the whole process of how Nodejs is really important for your web project. If you are looking to hire a node js development company in India then I would suggest that you take a little consultancy too whenever you call. 

Good Luck!

Original Source

#node.js development company in india #node js development company #hire node js developers #hire node.js developers in india #node.js development services #node.js development

Hoang  Kim

Hoang Kim

1658720197

Cách sử dụng Sequelize với Node.js và MySQL

Tìm hiểu cách cài đặt và cấu hình Sequelize với MySQL. Sử dụng Sequelize để tạo cơ sở dữ liệu và mô hình, cũng như thực hiện các thao tác chèn, chọn, xóa và hơn thế nữa 

Sequelize là một Trình lập bản đồ quan hệ đối tượng dựa trên Node.js giúp bạn dễ dàng làm việc với cơ sở dữ liệu MySQL , MariaDB , SQLite , PostgreSQL và hơn thế nữa. Một Object Relational Mapper thực hiện các chức năng như xử lý các bản ghi cơ sở dữ liệu bằng cách biểu diễn dữ liệu dưới dạng các đối tượng. Sequelize có một cơ chế di chuyển mạnh mẽ có thể chuyển đổi các lược đồ cơ sở dữ liệu hiện có thành các phiên bản mới. Nhìn chung, Sequelize cung cấp hỗ trợ tuyệt vời cho đồng bộ hóa cơ sở dữ liệu, tải nhanh, liên kết, giao dịch và di chuyển cơ sở dữ liệu đồng thời giảm thời gian phát triển và ngăn chặn việc tiêm SQL.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Sequelize với MySQL trên môi trường phát triển cục bộ của bạn. insertTiếp theo, bạn sẽ sử dụng Sequelize để tạo cơ sở dữ liệu và mô hình , cũng như thực hiện selectdeletecác hoạt động. Sau đó, bạn sẽ tạo các liên kết theo trình tự cho các mối quan hệ một-một , một-nhiềunhiều-nhiều . Cuối cùng, bạn sẽ tạo các truy vấn thô Sequelize để thay thế mảng và đối tượng.

Hướng dẫn này đã được thử nghiệm trên Node.js phiên bản 14.17.6 và npmphiên bản 6.14.15 trên macOS Catalina.

Bước 1 - Cài đặt và cấu hình Sequelize

Trong bước này, bạn sẽ cài đặt Sequelize và tạo kết nối đến cơ sở dữ liệu MySQL của mình. Để làm điều đó, trước tiên bạn sẽ tạo một ứng dụng Node.js. Sau đó, bạn sẽ cài đặt Sequelize, cấu hình cơ sở dữ liệu MySQL và phát triển một ứng dụng đơn giản.

Cài đặt Sequelize

Bắt đầu bằng cách tạo một thư mục dự án. Trong ví dụ này, bạn có thể sử dụng hello-world. Sau khi thư mục được tạo, hãy điều hướng đến thư mục bằng terminal:

mkdir hello-world
cd hello-world

Sau đó, tạo một ứng dụng Node.js mẫu bằng lệnh sau:

npm init

Tiếp theo, bạn sẽ được nhắc trả lời một số câu hỏi thiết lập. Sử dụng đầu ra sau cho cấu hình của bạn. Nhấn ENTERđể sử dụng giá trị mặc định được hiển thị và đảm bảo đặt điểm nhập chính là server.js. Điều này tạo ra một cấu trúc dự án dễ bảo trì.

Đầu ra sẽ trông như sau, sẽ điền vào package.jsontệp:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Tiếp theo, tạo một server.jstệp trống bên trong thư mục dự án:

touch server.js

Sau khi làm theo các bước trước đó, cấu trúc thư mục cuối cùng của bạn sẽ giống như sau:

hello-world/
├─ package.json
├─ server.js

Bây giờ bạn có thể cài đặt Sequelize bằng lệnh sau:

npm i sequelize@6.11.0

Lưu ý: Lệnh này cài đặt phiên bản 6.11.0. Nếu bạn cần cài đặt phiên bản mới nhất, hãy chạy npm i sequelize.

Sau những bản cập nhật này, package.jsontệp bây giờ trông giống như sau:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sequelize": "^6.11.0"
  }
}

Trong dependenciesphần này, bây giờ bạn sẽ thấy một phụ thuộc Sequelize.

Bạn đã thiết lập dự án và cài đặt Sequelize. Tiếp theo, bạn sẽ tạo một cơ sở dữ liệu mẫu để kết nối.

Tạo cơ sở dữ liệu mẫu

Là một phần của điều kiện tiên quyết, bạn đã cài đặt và định cấu hình MySQL, bao gồm cả việc tạo người dùng. Bây giờ bạn sẽ tạo một cơ sở dữ liệu trống.

Để làm điều đó, trước tiên, bạn cần đăng nhập vào phiên bản MySQL của mình. Nếu bạn đang chạy từ xa, bạn có thể sử dụng công cụ ưa thích của mình. Nếu bạn đang sử dụng phiên bản MySQL chạy cục bộ, bạn có thể sử dụng lệnh sau, thay thế your_username bằng tên người dùng MySQL của bạn:

mysql -u your_username -p

-ulà tên người dùng và -ptùy chọn được chuyển nếu tài khoản được bảo mật bằng mật khẩu.

Máy chủ MySQL sẽ hỏi mật khẩu cơ sở dữ liệu của bạn. Nhập mật khẩu của bạn và nhấn ENTER.

Khi bạn đã đăng nhập, hãy tạo một cơ sở dữ liệu được gọi hello_world_dbbằng lệnh sau:

CREATE DATABASE hello_world_db;

Để xác minh xem bạn đã tạo cơ sở dữ liệu thành công hay chưa, bạn có thể sử dụng lệnh sau:

SHOW DATABASES;

Đầu ra của bạn sẽ tương tự như sau:

+--------------------+
|      Database      |
+--------------------+
| hello_world_db     |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

Sau khi tạo cơ sở dữ liệu mẫu, ngắt kết nối khỏi máy chủ MySQL:

mysql> QUIT

Bây giờ, bạn cần cài đặt một trình điều khiển thủ công cho cơ sở dữ liệu mà bạn lựa chọn. Vì Sequelize chỉ cung cấp các tính năng ORM, nó không bao gồm các trình điều khiển cơ sở dữ liệu tích hợp sẵn. Do đó, bạn sẽ cần cài đặt trình điều khiển theo sở thích của mình. Để làm điều đó, hãy điều hướng đến thư mục dự án bằng cách sử dụng thiết bị đầu cuối và cài đặt trình điều khiển MySQL cho dự án bằng lệnh sau:

npm install --save mysql2

Trong trường hợp này, bạn đang sử dụng trình điều khiển cho MySQL.

Lưu ý: Vì hướng dẫn này sử dụng MySQL làm cơ sở dữ liệu, bạn đang sử dụng trình điều khiển cho điều đó. Tùy thuộc vào cơ sở dữ liệu của bạn, bạn có thể cài đặt trình điều khiển theo cách thủ công như sau:

  • npm install --save pg pg-hstore # Postgres
  • npm install --save mysql2
  • npm install --save mariadb
  • npm install --save sqlite3
  • npm install --save tedious # Microsoft SQL Server

Bây giờ bạn đã có một cơ sở dữ liệu mẫu, bạn có thể tạo ứng dụng Sequelize đầu tiên của mình với khả năng kết nối cơ sở dữ liệu.

Kết nối với Cơ sở dữ liệu MySQL

Trong phần này, bạn sẽ kết nối ứng dụng Node.js với cơ sở dữ liệu MySQL bằng cách sử dụng Sequelize.

Để kết nối với cơ sở dữ liệu, hãy mở server.jsđể chỉnh sửa bằng cách sử dụng nanohoặc trình soạn thảo mã ưa thích của bạn:

nano server.js

Tại đây, bạn sẽ tạo một kết nối cơ sở dữ liệu trong ứng dụng của mình bằng cách sử dụng phiên bản Sequelize. Trong new Sequelize()phương thức, hãy chuyển các tham số máy chủ MySQL và thông tin đăng nhập cơ sở dữ liệu như sau, thay thế DATABASE_USERNAMEDATABASE_PASSWORDbằng thông tin đăng nhập của người dùng MySQL của bạn:

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
 'hello_world_db',
 'DATABASE_USERNAME',
 'DATABASE_PASSWORD',
  {
    host: 'DATABASE_HOST',
    dialect: 'mysql'
  }
);

hostlà nơi máy chủ MySQL được lưu trữ, vì vậy bạn sẽ cần cung cấp URL máy chủ hoặc địa chỉ IP. Nếu bạn đang sử dụng máy chủ MySQL được cài đặt cục bộ, bạn có thể thay thế DATABASE_HOSTbằng localhosthoặc 127.0.0.1dưới dạng giá trị.

Tương tự, nếu bạn đang sử dụng máy chủ từ xa, hãy đảm bảo thay thế các giá trị kết nối cơ sở dữ liệu tương ứng bằng các chi tiết máy chủ từ xa thích hợp.

Lưu ý: Nếu bạn đang sử dụng bất kỳ phần mềm máy chủ cơ sở dữ liệu nào khác, bạn có thể thay thế tham số phương ngữ cho phù hợp. `phương ngữ: 'mysql', 'mariadb', 'postgres', 'mssql'.

Tiếp theo, gọi một phương thức dựa trên lời hứa authenticate() để khởi tạo kết nối cơ sở dữ liệu với ứng dụng. Để làm điều đó, hãy thêm khối mã sau vào server.jstệp của bạn:

...

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Phương authenticate()pháp này được sử dụng để kết nối với cơ sở dữ liệu và kiểm tra xem thông tin xác thực đã cho có chính xác hay không. Ở đây, kết nối cơ sở dữ liệu được mở theo mặc định và kết nối tương tự có thể được sử dụng cho tất cả các truy vấn. Bất cứ khi nào bạn cần đóng kết nối, hãy gọi sequelize.close()phương thức sau authenticate()cuộc gọi này. Để tìm hiểu thêm về Sequelize, vui lòng xem hướng dẫn bắt đầu của họ .

Hầu hết các phương thức được cung cấp bởi Sequelize là không đồng bộ. Điều đó có nghĩa là bạn có thể chạy các quy trình trong ứng dụng của mình trong khi khối mã không đồng bộ đang trong thời gian thực thi. Ngoài ra, sau khi thực thi khối mã không đồng bộ thành công, nó trả về một lời hứa , là giá trị được trả về khi kết thúc quá trình. Do đó, trong các khối mã không đồng bộ, bạn có thể sử dụng then()catch()trả finally()về dữ liệu đã xử lý.

Tại thời điểm này, server.jstệp sẽ giống như sau:

const Sequelize = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Lưu và đóng tệp của bạn.

Trong thư mục dự án, chạy server.jsứng dụng bằng cách chạy lệnh sau:

node server.js

Đầu ra của bạn sẽ như thế này:

Output
Connection has been established successfully!

Bạn đã tạo kết nối cơ sở dữ liệu thành công.

Trong bước này, bạn đã cài đặt Sequelize, tạo cơ sở dữ liệu mẫu và sử dụng Sequelize để kết nối với cơ sở dữ liệu. Tiếp theo, bạn sẽ làm việc với các mô hình trong Sequelize.

Bước 2 - Tạo bảng cơ sở dữ liệu bằng cách sử dụng Sequelize

Bây giờ bạn đã tạo cơ sở dữ liệu MySQL mẫu, bạn có thể sử dụng Sequelize để tạo bảng và điền dữ liệu vào bảng đó. Trong Sequelize, các bảng cơ sở dữ liệu được gọi là mô hình . Mô hình là một trừu tượng đại diện cho một bảng của cơ sở dữ liệu. Mô hình xác định một số thứ để Sắp xếp theo thứ tự, chẳng hạn như tên của bảng, chi tiết cột và kiểu dữ liệu. Trong bước này, bạn sẽ tạo một mô hình Sequelize cho dữ liệu sách.

Để bắt đầu, hãy tạo một tệp mới có tên book.model.jstrong thư mục dự án:

nano book.model.js

Tương tự như bước trước, thêm mã Sequelize để khởi tạo cơ sở dữ liệu với một lần nhập mới DataTypesở đầu tệp:

const { Sequelize, DataTypes } = require("sequelize");

Sequelize chứa nhiều kiểu dữ liệu dựng sẵn. Để truy cập các loại dữ liệu đó, bạn thêm nhập cho DataTypes. Hướng dẫn này đề cập đến một số kiểu dữ liệu được sử dụng thường xuyên, chẳng hạn như STRING, INTEGERDATEONLY. Để tìm hiểu thêm về các kiểu dữ liệu được hỗ trợ khác, bạn có thể tham khảo tài liệu Sequelize chính thức .

Sau đó, bao gồm các dòng bạn đã sử dụng trước đây để tạo kết nối với cơ sở dữ liệu MySQL của bạn, cập nhật thông tin đăng nhập MySQL của bạn cho phù hợp:

...

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Tiếp theo, bạn sẽ tạo một mô hình có tên , booksbao gồm title, và ID. Để làm điều đó, hãy sử dụng phương pháp như được hiển thị:authorrelease_datesubjectsequelize.define()

...

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

Phương sequelize.define()thức xác định một mô hình mới, mô hình này đại diện cho một bảng trong cơ sở dữ liệu. Khối mã này tạo một bảng được gọi và lưu trữ các bản booksghi sách theo dấu title, authorrelease_date.subject

Trong mã này, allowNullcho thấy rằng giá trị cột mô hình không được null. Tương tự như vậy, nếu bạn cần đặt một giá trị như vậy, bạn có thể sử dụng defaultValue: "value".

Tiếp theo, bạn sẽ thêm bookmô hình vào cơ sở dữ liệu của mình. Để làm điều đó, bạn sẽ sử dụng sync()phương pháp như sau:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Trong sync()phương thức này, bạn đang yêu cầu Sequelize thực hiện một vài thao tác với cơ sở dữ liệu. Với lệnh gọi này, Sequelize sẽ tự động thực hiện một truy vấn SQL đến cơ sở dữ liệu và tạo bảng, in thông báo Book table created successfully!.

Như đã đề cập, phương thức sync () là một phương thức dựa trên lời hứa, có nghĩa là nó cũng có thể thực hiện xử lý lỗi. Trong khối mã này, bạn sẽ kiểm tra xem bảng có được tạo thành công hay không. Nếu không, nó sẽ trả về một lỗi thông qua phương thức bắt và in nó trên đầu ra.

Lưu ý: Bạn có thể quản lý đồng bộ hóa mô hình bằng cách chuyển forcecác tham số để buộc tạo một bảng mới nếu nó không tồn tại hoặc sử dụng bảng hiện có. Dưới đây là một số ví dụ có thể hữu ích cho bạn khi làm việc với Sequelize:

  • model.sync(): Điều này tạo ra bảng nếu nó chưa tồn tại.
  • model.sync({ force: true }): Thao tác này tạo bảng bằng cách loại bỏ nó nếu đã tồn tại cùng một bảng.

Mã cuối cùng sẽ giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy ứng dụng của bạn bằng cách sử dụng lệnh sau:

node book.model.js

Bạn sẽ nhận được kết quả sau trong dòng lệnh của mình:

Output
Executing (default): SELECT 1+1 AS result
Executing (default): CREATE TABLE IF NOT EXISTS `books` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255) NOT NULL, `release_date` DATE, `subject` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Connection has been established successfully.
Executing (default): SHOW INDEX FROM `books`
Book table created successfully!

Trong đầu ra, bạn sẽ thấy nhật ký trả về có chứa thông báo , Book table created successfully!. Bạn có thể xác minh điều này bằng cách kiểm tra cơ sở dữ liệu của mình để xem booksbảng mới được tạo trong hello_world_dbcơ sở dữ liệu.

Để xác minh việc tạo bảng mới, hãy đăng nhập vào phiên bản MySQL của bạn:

mysql -u YOUR_USERNAME -p

Sau khi nhập mật khẩu của bạn, hãy thay đổi vào cơ sở dữ liệu mẫu:

USE hello_world_db;

Và sau đó chạy lệnh để hiển thị các bảng:

SHOW TABLES;

Đầu ra của bạn sẽ tương tự như sau:

+---------------------------+
| Tables_in_hello_world_db |
+---------------------------+
| books                     |
+---------------------------+
1 row in set (0.00 sec)

Cuối cùng, ngắt kết nối khỏi máy chủ MySQL:

mysql> QUIT

Bạn đã xác minh rằng việc booktạo mô hình đã thành công. Sử dụng quy trình này, bạn có thể tạo bất kỳ số lượng mô hình nào bằng cách làm theo cùng một quy trình.

Trong bước này, bạn đã tạo một mô hình trong cơ sở dữ liệu và bắt đầu làm việc với một mô hình bằng các phương thức tích hợp sẵn. Bạn cũng đã sử dụng các kiểu dữ liệu hỗ trợ Sequelize để xác định mô hình của mình. Tiếp theo, bạn sẽ làm việc với các truy vấn mô hình cơ bản.

Bước 3 - Sử dụng Sequelize cho các truy vấn cơ sở dữ liệu

Trong bước này, bạn sẽ sử dụng các truy vấn tích hợp sẵn của Sequelize để chèn, chọn, chọn với các mệnh đề điều kiện và xóa.

Chèn bản ghi mới

Trong bước trước, bạn đã tạo một bookmô hình bên trong cơ sở dữ liệu. Trong phần này, bạn sẽ chèn dữ liệu vào mô hình này.

Để bắt đầu, hãy sao chép nội dung của book.model.jsbước trước. Tạo một tệp mới được gọi book.controller.jsđể xử lý logic truy vấn. Thêm mã từ book.model.jsđến book.controller.js.

Trong book.controller.js, xác định vị trí sync()phương thức. Trong sync()phương thức, hãy thêm các dòng được đánh dấu sau:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');

   Book.create({
       title: "Clean Code",
       author: "Robert Cecil Martin",
       release_date: "2021-12-14",
       subject: 3
   }).then(res => {
       console.log(res)
   }).catch((error) => {
       console.error('Failed to create a new record : ', error);
   });

}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Tại đây, bạn chèn một bản ghi sách mới vào booksmô hình bạn đã tạo bằng sync()phương pháp này, hỗ trợ thêm các bản ghi mới vào các mô hình đã tạo trước đó. Khi phương thức sync () thực thi thành công, nó sẽ chạy then()phương thức. Bên trong then()phương thức, bạn gọi create()phương thức để chèn các bản ghi mới vào mô hình.

Bạn sử dụng create()phương thức để chuyển dữ liệu bạn cần thêm vào cơ sở dữ liệu dưới dạng một đối tượng. Phần mã được đánh dấu sẽ chèn một mục mới vào booksbảng hiện có của bạn. Trong ví dụ này, bạn thêm Clean Codetheo Robert Cecil Martin, đã được phân loại với subjectID của 3. Bạn có thể sử dụng cùng một mã, được cập nhật thông tin cho các sách khác, để thêm các bản ghi mới vào cơ sở dữ liệu của bạn.

Lưu và đóng tập tin.

Chạy ứng dụng bằng lệnh sau:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
books {
  dataValues:
   { id: 1,
     title: 'Clean Code',
     author: 'Robert Cecil Martin',
     release_date: '2021-12-14',
     subject: 3,
     updatedAt: 2021-12-14T10:12:16.644Z,
   ...
}

Bạn đã chèn một bản ghi mới vào mô hình bạn đã tạo trong cơ sở dữ liệu. Bạn có thể tiếp tục thêm nhiều bản ghi bằng cách sử dụng cùng một quy trình.

Chọn tất cả các bản ghi

Trong phần này, bạn sẽ chọn và lấy tất cả các hồ sơ sổ sách từ cơ sở dữ liệu bằng findAll()phương pháp. Để làm điều đó, trước tiên hãy mở book.controller.jsvà xóa Book.create()phương thức trước đó. Trong sync()phương thức, thêm Book.findAll()phương thức như được hiển thị:

...

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

    Book.findAll().then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

...

Lưu và đóng tập tin.

Tiếp theo, chạy lại ứng dụng bằng lệnh sau:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
[
  books {
    dataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
    _previousDataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
...
]

Đầu ra chứa tất cả dữ liệu sách dưới dạng một đối tượng mảng. Bạn đã sử dụng thành công phương pháp Sequelize findAll()để trả về tất cả dữ liệu sách từ cơ sở dữ liệu.

Lựa chọn với wheremệnh đề

Trong phần này, bạn sẽ chọn các giá trị có điều kiện bằng wheremệnh đề. Mệnh wheređề được sử dụng để chỉ định một điều kiện trong khi tìm nạp dữ liệu. Đối với hướng dẫn này, bạn sẽ nhận được một cuốn sách theo ID bản ghi cụ thể từ cơ sở dữ liệu bằng cách sử dụng findOne()phương pháp này.

Để làm điều đó, hãy mở book.controller.jsđể chỉnh sửa, xóa findAll()phương thức và thêm các dòng sau:

...

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

    Book.findOne({
        where: {
            id : "1"
        }
    }).then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn chọn một bản ghi sổ cụ thể từ cơ sở dữ liệu bằng cách sử dụng findOne()phương pháp có wheretùy chọn. Trong ví dụ này, bạn đang truy xuất dữ liệu sách có idgiá trị bằng 1.

Lưu và đóng tập tin.

Tiếp theo, chạy ứng dụng:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
books {
  dataValues: {
    id: 1,
    title: 'Clean Code',
    author: 'Robert Cecil Martin',
    release_date: '2020-01-01',
    subject: 'Science',
    createdAt: 2021-02-22T09:13:55.000Z,
    updatedAt: 2021-02-22T09:13:55.000Z
  },
  ...
}

Bạn đã sử dụng thành công wherecác mệnh đề để lấy dữ liệu từ các mô hình Sequelize. Bạn có thể sử dụng wheremệnh đề trong ứng dụng cơ sở dữ liệu để nắm bắt dữ liệu có điều kiện.

Xóa bản ghi

Để xóa một bản ghi cụ thể khỏi mô hình cơ sở dữ liệu, bạn sử dụng destroy()phương pháp với wheretùy chọn. Để làm điều đó, hãy mở book.controller.js, xóa findOne()phương thức và thêm các dòng được đánh dấu sau:

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

  Book.destroy({
      where: {
        id: 2
      }
  }).then(() => {
      console.log("Successfully deleted record.")
  }).catch((error) => {
      console.error('Failed to delete record : ', error);
  });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn xóa một bản ghi sách khỏi cơ sở dữ liệu bằng cách sử dụng destroy()phương pháp có wheretùy chọn và chuyển vào bản idghi sách để xóa. Bạn sẽ xóa hồ sơ sổ sách có số idbằng 2.

Lưu và đóng tập tin.

Tiếp theo, chạy ứng dụng:

node book.controller.js

Đầu ra của bạn sẽ giống như sau:

Output
Successfully deleted record.

Bản ghi đã bị xóa.

Trong bước này, bạn đã thử nghiệm với mô hình cơ sở dữ liệu và truy vấn mô hình của mình. Bạn đã khởi tạo cơ sở dữ liệu, tạo mô hình, chèn bản ghi, bản ghi đã truy xuất, bản ghi được truy xuất với các điều kiện bằng cách sử dụng wheremệnh đề và xóa bản ghi đã chọn. Với kiến ​​thức này về Sequelize, bây giờ bạn sẽ tạo các liên kết trong Sequelize. Sau đó, bạn sẽ có thể xác định và làm việc với nhiều mối quan hệ khác nhau bằng cách sử dụng các mô hình Sequelize.

Bước 4 - Tạo liên kết bằng cách sử dụng Sequelize

Trong bước này, bạn sẽ sử dụng các kiểu liên kết tiêu chuẩn mà Sequelize hỗ trợ: liên kết một-một , một-nhiềunhiều-nhiều . Bạn sẽ sử dụng dữ liệu mẫu về sinh viên, khóa học và cấp lớp.

Sequelize sử dụng các kiểu kết hợp dựa trên các mối quan hệ cơ sở dữ liệu sau:

mối quan hệ một-một : Mối quan hệ một-một có nghĩa là một bản ghi trong một bảng được liên kết với chính xác một bản ghi trong một bảng khác. Về Sequelize, bạn có thể sử dụngbelongsTo()hasOne()các liên kết để tạo ra loại mối quan hệ này.

mối quan hệ một -nhiều : Mối quan hệ một-nhiều có nghĩa là một bản ghi trong một bảng được liên kết với nhiều bản ghi trong một bảng khác. Với Sequelize, bạn có thể sử dụnghasMany()các phương thức kết hợp để tạo kiểu quan hệ này.

Mối quan hệ nhiều-nhiều : Mối quan hệ nhiều-nhiều có nghĩa là nhiều bản ghi trong một bảng được liên kết với nhiều bản ghi trong bảng khác. Với Sequelize, bạn có thể sử dụngbelongsToMany()các liên kết để tạo loại mối quan hệ này.

Trước khi tạo các liên kết này, trước tiên bạn sẽ tạo một cơ sở dữ liệu mới được gọi là student_dbvà thêm các mô hình mới và một số dữ liệu mẫu cho sinh viên, khóa học và cấp lớp.

Để tạo cơ sở dữ liệu, hãy làm theo quy trình tương tự trong Bước 1 - Cài đặt và cấu hình Sequelize để đăng nhập vào MySQL và tạo cơ sở dữ liệu được gọi student_db. Khi cơ sở dữ liệu mới đã được tạo, hãy đăng xuất khỏi MySQL. Tiếp theo, bạn sẽ bắt đầu tạo các liên kết cơ sở dữ liệu.

Tạo mối quan hệ 1-1 vớibelongsTo()

Trong phần này, bạn sẽ tạo mối quan hệ 1-1 bằng cách sử dụng mô hình Sequelize. Hãy tưởng tượng bạn muốn nhận thông tin chi tiết của một học sinh cùng với cấp lớp của họ. Vì một học sinh chỉ có thể có một cấp lớp, nên kiểu liên kết này là mối quan hệ một-một và bạn có thể sử dụng belongsTo()phương pháp này.

Lưu ý: Có sự khác biệt giữa belongsTo()hasOne(). belongsTo()sẽ thêm foreignKeyvào bảng nguồn, trong khi hasOne()sẽ thêm nó vào bảng đích. Trong mọi trường hợp, nếu cả hai mối quan hệ được sử dụng cùng một lúc, nó sẽ hoạt động như Trình tự hóa các mối quan hệ một đối một hai chiều.

Phương belongsTo()pháp này cho phép bạn tạo mối quan hệ 1-1 giữa hai mô hình Sequelize. Trong ví dụ này, bạn đang sử dụng các mô hình StudentGrade.

Tạo một tệp mới có tên one_to_one.js. Như bạn đã làm trong phần trước, Kết nối với Cơ sở dữ liệu MySQL , bao gồm các dòng để tạo kết nối với cơ sở dữ liệu và xác thực người dùng MySQL của bạn ở đầu tệp. Đảm bảo cập nhật thông tin đăng nhập MySQL nếu cần:

const { Sequelize, DataTypes } = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

Trong phần này, bạn sẽ tạo ba mô hình trong student_dbcơ sở dữ liệu Studentmới :, GradeCourse. Bạn sẽ bắt đầu bằng cách tạo StudentGradecác mô hình. Sau đó trong bước này, bạn sẽ tạo Coursesmô hình.

Đối với Studentmô hình, hãy thêm khối mã sau vào one_to_one.js:

...
const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

Mô hình sinh viên này chứa hai cột: student_idname.

Tiếp theo, thêm một khối mã cho Grademô hình:

...
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

Gradehình chứa cột grade.

Để chứng minh các liên kết, bạn sẽ cần thêm dữ liệu mẫu vào cơ sở dữ liệu. Đối với điều đó, bạn sẽ sử dụng bulk()phương pháp này. Thay vì chèn dữ liệu vào từng hàng một, bulkCreate()phương pháp này cho phép bạn chèn nhiều hàng vào các mô hình cơ sở dữ liệu của mình cùng một lúc.

Vì vậy, bây giờ, hãy nhập GradeStudentdữ liệu vào các mô hình tương ứng của chúng trong cơ sở dữ liệu như được hiển thị:

...
const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           …
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Tại đây, bạn cung cấp dữ liệu mẫu và nhập dữ liệu vào mô hình StudentGrade. Với cơ sở dữ liệu, mô hình và dữ liệu mẫu của bạn, bạn đã sẵn sàng tạo các liên kết.

Trong one-to-one.js, thêm dòng sau vào bên dưới student_datakhối:

...
Student.belongsTo(Grade);

Tiếp theo, bạn sẽ cần kiểm tra xem liên kết có hoạt động bình thường hay không. Để làm điều đó, bạn có thể truy xuất tất cả dữ liệu của học sinh với các cấp lớp liên quan bằng cách chuyển includetham số vào bên trong findAll()phương thức.

Vì bạn cần đạt được cấp độ học sinh nên bạn sẽ vượt qua Gradenhư người mẫu. Trong sequelize.sync()phương thức, hãy thêm các dòng được đánh dấu như được hiển thị:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Mã hoàn chỉnh trông giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );
sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-One association
Student.belongsTo(Grade);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy tệp bằng cách sử dụng lệnh sau:

node one_to_one.js

Đầu ra sẽ dài và bạn sẽ thấy tất cả dữ liệu của học sinh với các cấp lớp. Đây là một đoạn mã của kết quả hiển thị dữ liệu sinh viên:

Output
students {
    dataValues:
   { student_id: '3e786a8f-7f27-4c59-8e9c-a8c606892288',
       name: 'Sam Lewis',
       createdAt: 2021-12-16T08:49:38.000Z,
       updatedAt: 2021-12-16T08:49:38.000Z,
       gradeId: 1,
       grade: [grades] },
    _previousDataValues:
...

Tùy thuộc vào công cụ dòng lệnh bạn đang sử dụng, đầu ra có thể in ra dưới dạng dạng xem mở rộng hoặc không. Nếu nó là một dạng xem được mở rộng, nó sẽ in gradeđối tượng được mở rộng làm đầu ra.

Trong phần này, bạn đã tạo mối quan hệ một đối một bằng cách sử dụng lệnh Student.belongsTo(Grade);gọi phương thức và nhận thông tin chi tiết theo liên kết bạn đã tạo.

Tạo mối quan hệ một-nhiều vớihasMany()

Trong phần này, bạn sẽ tạo mối quan hệ một-nhiều bằng cách sử dụng mô hình Sequelize. Hãy tưởng tượng bạn muốn có tất cả học sinh được liên kết với một cấp lớp đã chọn. Vì một cấp lớp cụ thể có thể có nhiều học sinh, đây là mối quan hệ một-nhiều.

Để bắt đầu, hãy sao chép nội dung của one_to_one.jsvào một tệp mới có tên one_to_many.js. Trong one_to_many.js, loại bỏ các dòng sau student_datakhối. Tệp của bạn one_to_many.jssẽ trông như thế này:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

Sau student_datakhối, hãy sử dụng hasMany()phương thức để tạo mối quan hệ mới:

...
Grade.hasMany(Student)

Phương hasMany()pháp này cho phép bạn tạo mối quan hệ một-nhiều giữa hai mô hình Sequelize. Ở đây, bạn đang sử dụng GradeStudentcác mô hình.

Tiếp theo, thêm sequelize.sync()phương thức với findAll()phương thức bên dưới hasMany()dòng:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Ở đây, bạn đang cố gắng truy cập vào tất cả học sinh trong một cấp lớp cụ thể — trong trường hợp này là tất cả học sinh trong lớp 9. Bạn cũng đã thêm Studentmô hình trong includetùy chọn.

Đây là mã hoàn chỉnh:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-Many relationship
Grade.hasMany(Student);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

Lưu và đóng tệp của bạn.

Chạy tệp bằng lệnh sau:

node one_to_many.js

Đầu ra sẽ tương tự như sau. Sẽ khá lâu nhưng tất cả học sinh trong lớp 9sẽ được trả về như sau:

Output
[ grades {
    dataValues:
     { id: 1,
       grade: 9,
       createdAt: 2021-12-20T05:12:31.000Z,
       updatedAt: 2021-12-20T05:12:31.000Z,
       students:
        [ students {
            dataValues:
             { student_id: '8a648756-4e22-4bc0-8227-f590335f9965',
               name: 'Sam Lewis',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...
          students {
            dataValues:
             { student_id: 'f0304585-91e5-4efc-bdca-501b3dc77ee5',
               name: 'Max Butler',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...

Trong phần này, bạn đã tạo mối quan hệ một-nhiều bằng cách Grade.hasMany(Student);gọi phương thức. Trong đầu ra, bạn truy xuất các chi tiết theo liên kết mà bạn đã tạo.

Tạo ra nhiều mối quan hệ vớibelongsToMany()

Trong phần này, bạn sẽ tạo mối quan hệ nhiều-nhiều bằng cách sử dụng mô hình Sequelize. Ví dụ, hãy tưởng tượng một tình huống mà sinh viên đăng ký vào các khóa học. Một học viên có thể đăng ký nhiều khóa học và một khóa học có thể có nhiều học viên. Đây là một mối quan hệ nhiều-nhiều. Để thực hiện điều này bằng cách sử dụng Sequelize, bạn sẽ sử dụng các mô hình StudentCoursephương StudentCoursepháp belongsToMany().

Để bắt đầu, hãy tạo một tệp được gọi many_to_many.jsvà thêm các khối mã xác thực và khởi tạo cơ sở dữ liệu như sau. (Bạn có thể sử dụng lại các khối mã từ one_to_many.jsví dụ trước.) Đảm bảo cập nhật các giá trị kết nối cơ sở dữ liệu được đánh dấu nếu cần.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Tiếp theo, bạn sẽ tạo các mô hình cơ sở dữ liệu cho các mối quan hệ nhiều-nhiều: StudentCourse. Sau đó, bạn sẽ thêm một số dữ liệu mẫu vào các mô hình đó.

...

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Tại đây, bạn tạo StudentCoursecác mô hình và cung cấp một số dữ liệu mẫu. Bạn cũng đặt a courseID, mà bạn sẽ sử dụng để truy xuất học sinh theo kiểu quan hệ này.

Cuối cùng, bạn đã xác định một mô hình mới được gọi là StudentCourse, mô hình này quản lý dữ liệu mối quan hệ giữa StudentCourse. Trong ví dụ này, studentId 1được đăng ký courseId 1courseId 2.

Bạn đã hoàn thành việc khởi tạo cơ sở dữ liệu và thêm dữ liệu mẫu vào cơ sở dữ liệu. Tiếp theo, tạo mối quan hệ nhiều-nhiều bằng belongsToMany()phương pháp như được hiển thị:

...
Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

Trong belongsToMany()phương thức, bạn chuyển throughcấu hình với tên của mô hình làm tùy chọn cấu hình. Trong trường hợp này, nó là StudentCourse. Đây là bảng quản lý các mối quan hệ nhiều-nhiều.

Cuối cùng, bạn có thể kiểm tra xem liên kết có hoạt động bình thường hay không bằng cách truy xuất tất cả dữ liệu khóa học với các sinh viên được liên kết. Bạn sẽ làm điều đó bằng cách chuyển includetham số vào bên trong findAll()phương thức. Thêm các dòng sau vào many_to_many.js:

...
sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Mã hoàn chỉnh trông giống như sau:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
    },
    name: {
       type: DataTypes.STRING,
       allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Lưu và đóng tập tin.

Chạy tệp bằng lệnh sau:

node many_to_many.js

Đầu ra sẽ dài, nhưng sẽ trông giống như sau:

Output[ courses {
    dataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _changed: Set {},
    _options:
     { isNewRecord: false,
       _schema: null,
       _schemaDelimiter: '',
       include: [Array],
       includeNames: [Array],
       includeMap: [Object],
       includeValidated: true,
       attributes: [Array],
       raw: true },
    isNewRecord: false,
    students: [ [students], [students] ] },
  courses {
    dataValues:
     { id: 2,
       course_name: 'Maths',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
...

Như bạn có thể thấy trong đầu ra này, các khóa học có sinh viên liên quan đã được truy xuất. Trong courseskhối, bạn sẽ thấy các idgiá trị riêng biệt cho biết từng khóa học. Ví dụ: id: 1được kết nối với lớp course_name: Sciencedành cho Khoa học, trong khi id: 2lớp Toán, v.v.

Trong cơ sở dữ liệu, bạn có thể thấy ba bảng được tạo với dữ liệu mẫu mà bạn đã chèn.

Trong bước này, bạn đã sử dụng Sequelize để tạo các liên kết một-một, một-nhiều và nhiều-nhiều. Tiếp theo, bạn sẽ làm việc với các truy vấn thô.

Bước 5 - Làm việc với các truy vấn thô

Trong bước này, bạn sẽ làm việc với các truy vấn thô trong Sequelize. Trong các bước trước, bạn đã sử dụng các phương thức tích hợp sẵn của Sequelize, chẳng hạn như insert()findAll(), để xử lý việc chèn và chọn dữ liệu từ cơ sở dữ liệu. Bạn có thể nhận thấy rằng các phương pháp đó tuân theo một mẫu cụ thể để viết một truy vấn. Tuy nhiên, với việc sử dụng các truy vấn thô, bạn không cần phải lo lắng về các phương thức và mẫu tích hợp sẵn của Sequelize. Sử dụng kiến ​​thức của bạn về các truy vấn SQL, bạn có thể thực hiện một loạt các truy vấn trong Sequelize từ đơn giản đến nâng cao hơn.

Dưới đây là một ví dụ về các truy vấn thô thực hiện hành động chọn tất cả các giá trị từ một bảng cụ thể, xóa các giá trị đã chọn theo điều kiện và cập nhật bảng với các giá trị đã cho.

SELECT * FROM table_name;
DELETE FROM table_name WHERE condition;
UPDATE table_name SET y = 42 WHERE x = 12;

Trong Sequelize, các truy vấn thô có thể được sử dụng với hai phương pháp chủ yếu: thay thế mảng và thay thế đối tượng. Khi bạn đang chuyển các giá trị cho truy vấn SQL, bạn có thể sử dụng một mảng hoặc một đối tượng để thực hiện việc thay thế đó.

Trước khi viết một truy vấn thô, trước tiên bạn cần cung cấp dữ liệu sinh viên trong cơ sở dữ liệu mẫu. Tiếp theo phần trước, Tạo cơ sở dữ liệu mẫu , đăng nhập vào MySQL, tạo cơ sở dữ liệu được gọi sample_student_dbvà đăng xuất khỏi MySQL.

Tiếp theo, bạn sẽ thêm một số dữ liệu thô để bắt đầu làm việc với các truy vấn thô. Tạo một tệp mới được gọi add_student_records.jsvà thêm các khối mã sau, chứa các phương thức Sequelize đã được thảo luận trước đây về authenticate(), sync()bulkCreate().

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const student_data = [
    {name : "John Baker"},
    {name : "Max Butler"},
    {name : "Ryan Fisher"},
    {name : "Robert Gray"},
    {name : "Sam Lewis"}
]

sequelize.sync({ force: true }).then(() => {

    Student.bulkCreate(student_data, { validate: true }).then((result) => {
        console.log(result);
    }).catch((error) => {
        console.log(error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

Tại đây, bạn bắt đầu kết nối cơ sở dữ liệu, tạo mô hình và chèn một vài hồ sơ sinh viên vào bên trong cơ sở dữ liệu mới.

Lưu và đóng tập tin.

Tiếp theo, chạy tập lệnh này bằng lệnh sau:

node add_student_records.js

Đầu ra sẽ tương tự như sau. Nó sẽ khá dài, nhưng tất cả các hồ sơ học sinh mà bạn đã chèn sẽ được trả về như sau. Lưu ý rằng vì giá trị student_idUUID ( Số nhận dạng duy nhất phổ biến ) được tạo tự động nên giá trị này sẽ khác nhau tùy thuộc vào người dùng.

Output
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `students`;
Connection has been established successfully.
Executing (default): DROP TABLE IF EXISTS `students`;
Executing (default): CREATE TABLE IF NOT EXISTS `students` (`student_id` CHAR(36) BINARY , `name` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`student_id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `students`
Executing (default): INSERT INTO `students` (`student_id`,`name`,`createdAt`,`updatedAt`) VALUES ('45d1f26c-ba76-431f-ac5f-f41282351710','John Baker','2022-06-03 07:27:49','2022-06-03 07:27:49'),('1cb4e34d-bfcf-4a97-9624-e400b9a1a5f2','Max Butler','2022-06-03 07:27:49','2022-06-03 07:27:49'),('954c576b-ba1c-4dbc-a5c6-8eaf22bbbb04','Ryan Fisher','2022-06-03 07:27:49','2022-06-03 07:27:49'),('e0f15cd3-0025-4032-bfe8-774e38e14c5f','Robert Gray','2022-06-03 07:27:49','2022-06-03 07:27:49'),('826a0ec9-edd0-443f-bb12-068235806659','Sam Lewis','2022-06-03 07:27:49','2022-06-03 07:27:49');
[
  students {
    dataValues: {
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710'`,
      name: 'John Baker',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },
    _previousDataValues: {
      name: 'John Baker',
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },

…

Trong phần tiếp theo, bạn sẽ áp dụng các truy vấn thô bằng cách sử dụng một trong các student_idkết quả đầu ra trong khối mã ở trên. Sao chép nó xuống để bạn có nó cho các phần tiếp theo, nơi bạn sẽ sử dụng query()phương thức để thay thế mảng và đối tượng.

Thay thế mảng

Trong phần này, bạn sẽ sử dụng query()phương thức để thay thế mảng. Với phương pháp này, Sequelize có thể thực thi các truy vấn SQL thô hoặc đã được chuẩn bị sẵn.

Để bắt đầu, hãy sao chép nội dung của server.jstệp từ Bước 1 , vì nó bao gồm Sequelize()phương thức khởi tạo và khởi tạo cơ sở dữ liệu. Dán nội dung vào một tệp mới có tên array_raw_query.js. Cập nhật tên cơ sở dữ liệu thành sample_student_db:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Ở cuối tệp, hãy thêm khối mã sau để thay thế mảng, đảm bảo thay thế REPLACE_STUDENT_IDbằng student_idgiá trị mà bạn đã sao chép trong phần trước.

...
sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Để thay thế mảng, bạn truyền query()phương thức với truy vấn SQL và đối tượng cấu hình. Nó chứa replacementsgiá trị và kiểu. Để thay thế, bạn chuyển dữ liệu dưới dạng một mảng và bắt các giá trị đó bằng ?biểu tượng dấu hỏi chấm ().

Tiếp theo, vì bạn cần lấy dữ liệu về một học sinh cụ thể, nên giá trị student_idsẽ được chuyển làm tham số thứ hai. Sau đó, bạn chuyển type: sequelize.QueryTypes.SELECTcặp khóa-giá trị mà bạn có thể sử dụng để chọn dữ liệu từ cơ sở dữ liệu.

Ngoài ra còn có một số loại khác, chẳng hạn như QueryTypes.UPDATEQueryTypes.DELETE. Tùy theo yêu cầu mà bạn có thể lựa chọn loại phù hợp với mục đích của mình.

Sau đây là toàn bộ khối mã. Tại đây bạn kết nối với cơ sở dữ liệu và truy xuất dữ liệu sinh viên đã chọn bằng truy vấn thô.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Lưu và đóng tệp của bạn.

Tiếp theo, bạn có thể chạy tập lệnh này bằng lệnh sau:

node array_raw_query.js

Bạn sẽ thấy đầu ra tương tự như sau:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

Do đã chọn student_id, giá trị đầu ra của bạn có thể khác nhau.

Thay thế đối tượng

Nhìn bề ngoài, thay thế đối tượng tương tự như thay thế mảng, nhưng mô hình truyền dữ liệu đến truy vấn thô là khác. Trong tùy chọn thay thế, bạn chuyển dữ liệu dưới dạng một đối tượng và trong tùy chọn truy vấn, bạn sử dụng các giá trị như :key.

Để bắt đầu, hãy tạo một tệp mới có tên object_raw_query.jsvà dán các khối mã hoàn chỉnh từ server.jstệp, cập nhật cơ sở dữ liệu lên sample_student_db.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

Sau đó, thêm khối mã sau vào cuối object_raw_query.jstệp mới:

...
sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Tại đây, bạn nhận được dữ liệu sinh viên đã chọn bằng cách sử dụng phương pháp thay thế đối tượng. Bạn tạo một replacementđối tượng, đặt làm thông tin sinh viên mà bạn idmuốn lấy:.{ id: 'REPLACE_STUDENT_ID' }

Trong , bạn chỉ ra query():. 'SELECT * FROM students WHERE student_id = :id'Sử dụng query()phương thức này, bạn chuyển giá trị thay thế dưới dạng một đối tượng, đó là lý do tại sao phương thức này được gọi là thay thế đối tượng.

Đây là mã hoàn chỉnh:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

Lưu và đóng tập tin.

Tiếp theo, chạy tập lệnh này bằng lệnh sau:

node object_raw_query.js

Đầu ra sẽ giống như sau:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

Do đã chọn student_id, giá trị đầu ra của bạn có thể khác nhau.

Trong bước này, bạn đã làm việc với Chuỗi truy vấn thô bằng cách sử dụng hai phương pháp khác nhau: thay thế mảng và thay thế đối tượng.

Sự kết luận

Trong hướng dẫn này, bạn đã cài đặt và định cấu hình Sequelize. Bạn cũng đã tạo và làm việc với các mô hình, đây là một trong những thành phần bắt buộc của Sequelize. Cuối cùng, bạn đã tạo các kiểu liên kết khác nhau và làm việc với các truy vấn thô bằng cách sử dụng các ví dụ thực tế.

Tiếp theo, bạn có thể sử dụng các kiểu dữ liệu khác nhau để tạo các mô hình cơ sở dữ liệu. Bạn cũng có thể cập nhật và xóa bản ghi trong cơ sở dữ liệu bằng cả phương thức tích hợp sẵn và truy vấn thô.

Nguồn bài viết gốc tại https://www.digitalocean.com

#sequelize #node #mysql #database 

Node JS Development Company| Node JS Web Developers-SISGAIN

Top organizations and start-ups hire Node.js developers from SISGAIN for their strategic software development projects in Illinois, USA. On the off chance that you are searching for a first rate innovation to assemble a constant Node.js web application development or a module, Node.js applications are the most appropriate alternative to pick. As Leading Node.js development company, we leverage our profound information on its segments and convey solutions that bring noteworthy business results. For more information email us at hello@sisgain.com

#node.js development services #hire node.js developers #node.js web application development #node.js development company #node js application