Phân trang NodeJS phần tiếp theo

Thông báo quan trọng. để thực hiện các truy vấn sẵn sàng sản xuất với Phần tiếp theo, hãy đảm bảo bạn cũng đã đọc hướng dẫn về Giao dịch. Giao dịch rất quan trọng để đảm bảo tính toàn vẹn của dữ liệu và cung cấp các lợi ích khác

Hướng dẫn này sẽ chỉ ra cách thực hiện các truy vấn CRUD tiêu chuẩn

Truy vấn INSERT đơn giản

Đầu tiên, một ví dụ đơn giản

// Create a new user
const jane = await User.create({ firstName: "Jane", lastName: "Doe" });
console.log("Jane's auto-generated ID:", jane.id);

Phương thức này là cách viết tắt để xây dựng một phiên bản chưa được lưu và lưu phiên bản đó với

Cũng có thể xác định thuộc tính nào có thể được đặt trong phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
5. Điều này có thể đặc biệt hữu ích nếu bạn tạo các mục nhập cơ sở dữ liệu dựa trên biểu mẫu mà người dùng có thể điền vào. Ví dụ: sử dụng điều đó sẽ cho phép bạn hạn chế mô hình
Model.findAll({
attributes: ['foo', 'bar']
});
6 chỉ đặt tên người dùng chứ không đặt cờ quản trị viên (tôi. e. ,
Model.findAll({
attributes: ['foo', 'bar']
});
7)

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false

Truy vấn CHỌN đơn giản

Bạn có thể đọc toàn bộ bảng từ cơ sở dữ liệu bằng phương thức

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));

SELECT * FROM ...

Chỉ định các thuộc tính cho các truy vấn CHỌN

Để chỉ chọn một số thuộc tính, bạn có thể sử dụng tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
9

Model.findAll({
attributes: ['foo', 'bar']
});

SELECT foo, bar FROM ...

Các thuộc tính có thể được đổi tên bằng cách sử dụng một mảng lồng nhau

Model.findAll({
attributes: ['foo', 'bar']
});
0

Model.findAll({
attributes: ['foo', 'bar']
});
1

Bạn có thể sử dụng để làm tập hợp

Model.findAll({
attributes: ['foo', 'bar']
});
2

Model.findAll({
attributes: ['foo', 'bar']
});
3

Khi sử dụng chức năng tổng hợp, bạn phải đặt cho nó một bí danh để có thể truy cập nó từ mô hình. Trong ví dụ trên, bạn có thể lấy số lượng mũ bằng

SELECT foo, bar FROM ...
1

Đôi khi việc liệt kê tất cả các thuộc tính của mô hình có thể gây mệt mỏi nếu bạn chỉ muốn thêm một tập hợp

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
0

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
1

Tương tự, cũng có thể loại bỏ một số thuộc tính đã chọn

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
2

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
3

Áp dụng mệnh đề WHERE

Tùy chọn

SELECT foo, bar FROM ...
2 được sử dụng để lọc truy vấn. Có rất nhiều toán tử để sử dụng cho mệnh đề
SELECT foo, bar FROM ...
2, có sẵn dưới dạng Ký hiệu từ

Những thứ cơ bản

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
4

Quan sát rằng không có toán tử nào (từ

SELECT foo, bar FROM ...
4) được thông qua một cách rõ ràng, vì vậy Sequelize mặc định mặc định so sánh đẳng thức. Đoạn mã trên tương đương với

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
5

Nhiều kiểm tra có thể được thông qua

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
6

Giống như Sequelize đã suy ra toán tử

SELECT foo, bar FROM ...
6 trong ví dụ đầu tiên, ở đây Sequelize đã suy ra rằng người gọi muốn có một
SELECT foo, bar FROM ...
7 cho hai lần kiểm tra. Đoạn mã trên tương đương với

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
7

Có thể dễ dàng thực hiện một

SELECT foo, bar FROM ...
8 theo cách tương tự

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
8

Vì ở trên là một

SELECT foo, bar FROM ...
8 liên quan đến cùng một trường, Sequelize cho phép bạn sử dụng một cấu trúc hơi khác, dễ đọc hơn và tạo ra cùng một hành vi

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
9

nhà điều hành

Sequelize cung cấp một số toán tử

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
0

Cú pháp viết tắt của
Model.findAll({
attributes: ['foo', 'bar']
});
00

Truyền một mảng trực tiếp vào tùy chọn

SELECT foo, bar FROM ...
2 sẽ ngầm sử dụng toán tử
Model.findAll({
attributes: ['foo', 'bar']
});
02

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
1

Kết hợp logic với toán tử

Các toán tử

Model.findAll({
attributes: ['foo', 'bar']
});
03,
Model.findAll({
attributes: ['foo', 'bar']
});
04 và
Model.findAll({
attributes: ['foo', 'bar']
});
05 có thể được sử dụng để tạo các phép so sánh logic lồng nhau phức tạp tùy ý

Ví dụ với
Model.findAll({
attributes: ['foo', 'bar']
});
03 và
Model.findAll({
attributes: ['foo', 'bar']
});
04

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
2

Ví dụ với
Model.findAll({
attributes: ['foo', 'bar']
});
05

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
3

Ở trên sẽ tạo ra

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
4

Truy vấn nâng cao với hàm (không chỉ cột)

Điều gì sẽ xảy ra nếu bạn muốn lấy thứ gì đó như

Model.findAll({
attributes: ['foo', 'bar']
});
09?

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
5

Lưu ý cách sử dụng các phương thức và, nên được sử dụng để chỉ định một lệnh gọi hàm SQL và một cột trong bảng tương ứng. Các phương pháp này nên được sử dụng thay vì chuyển một chuỗi đơn giản (chẳng hạn như

Model.findAll({
attributes: ['foo', 'bar']
});
12) vì Sequelize cần xử lý tình huống này theo cách khác (ví dụ: sử dụng các phương pháp thoát ký hiệu khác)

Điều gì nếu bạn cần một cái gì đó phức tạp hơn?

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
6

Ở trên tạo ra SQL sau

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
7

Toán tử phạm vi chỉ dành cho Postgres

Các loại phạm vi có thể được truy vấn với tất cả các toán tử được hỗ trợ

Hãy ghi nhớ, giá trị phạm vi được cung cấp cũng có thể

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
8

không dùng nữa. bí danh nhà điều hành

Trong Sequelize v4, có thể chỉ định các chuỗi để chỉ các toán tử, thay vì sử dụng Ký hiệu. Điều này hiện không được dùng nữa và không được khuyến khích nhiều và có thể sẽ bị xóa trong phiên bản chính tiếp theo. Nếu bạn thực sự cần nó, bạn có thể chuyển tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
13 trong hàm tạo Sequelize

Ví dụ

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
9

Truy vấn CẬP NHẬT đơn giản

Truy vấn cập nhật cũng chấp nhận tùy chọn

SELECT foo, bar FROM ...
2, giống như truy vấn đọc được hiển thị ở trên

SELECT * FROM ...
0

Các truy vấn XÓA đơn giản

Truy vấn xóa cũng chấp nhận tùy chọn

SELECT foo, bar FROM ...
2, giống như truy vấn đọc được hiển thị ở trên

SELECT * FROM ...
1

Để hủy mọi thứ, có thể sử dụng SQL

Model.findAll({
attributes: ['foo', 'bar']
});
16

SELECT * FROM ...
2

Tạo hàng loạt

Sequelize cung cấp phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
17 cho phép tạo nhiều bản ghi cùng lúc, chỉ với một truy vấn

Cách sử dụng của

Model.findAll({
attributes: ['foo', 'bar']
});
17 rất giống với
Model.findAll({
attributes: ['foo', 'bar']
});
19, bằng cách nhận một mảng các đối tượng thay vì một đối tượng duy nhất

SELECT * FROM ...
3

Tuy nhiên, theo mặc định,

Model.findAll({
attributes: ['foo', 'bar']
});
20 không chạy xác thực trên từng đối tượng sẽ được tạo (điều mà
Model.findAll({
attributes: ['foo', 'bar']
});
5 thực hiện). Để làm cho
Model.findAll({
attributes: ['foo', 'bar']
});
20 cũng chạy các xác thực này, bạn phải vượt qua tùy chọn
Model.findAll({
attributes: ['foo', 'bar']
});
23. Điều này sẽ làm giảm hiệu suất. Ví dụ sử dụng

SELECT * FROM ...
4

Nếu bạn đang chấp nhận các giá trị trực tiếp từ người dùng, có thể hữu ích khi giới hạn các cột mà bạn thực sự muốn chèn. Để hỗ trợ điều này,

Model.findAll({
attributes: ['foo', 'bar']
});
24 chấp nhận tùy chọn
Model.findAll({
attributes: ['foo', 'bar']
});
25, một mảng xác định trường nào phải được xem xét (phần còn lại sẽ bị bỏ qua)

SELECT * FROM ...
5

Đặt hàng và nhóm

Sequelize cung cấp các tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
26 và
Model.findAll({
attributes: ['foo', 'bar']
});
27 để làm việc với
Model.findAll({
attributes: ['foo', 'bar']
});
28 và
Model.findAll({
attributes: ['foo', 'bar']
});
29

đặt hàng

Tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
26 lấy một mảng các mục để sắp xếp truy vấn theo hoặc phương thức sắp xếp lại. Bản thân các mục này là các mảng có dạng
Model.findAll({
attributes: ['foo', 'bar']
});
31. Cột sẽ được thoát chính xác và hướng sẽ được kiểm tra trong danh sách trắng gồm các hướng hợp lệ (chẳng hạn như
Model.findAll({
attributes: ['foo', 'bar']
});
32,
Model.findAll({
attributes: ['foo', 'bar']
});
33,
Model.findAll({
attributes: ['foo', 'bar']
});
34, v.v.)

SELECT * FROM ...
6

Tóm lại, các phần tử của mảng thứ tự có thể như sau

  • Một chuỗi (sẽ được trích dẫn tự động)
  • Một mảng, có phần tử đầu tiên sẽ được trích dẫn, phần tử thứ hai sẽ được thêm vào nguyên văn
  • Một đối tượng có trường
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    35
    • Nội dung của
      Model.findAll({
      attributes: ['foo', 'bar']
      });
      35 sẽ được bổ sung nguyên văn mà không trích dẫn
    • Mọi thứ khác bị bỏ qua và nếu raw không được đặt, truy vấn sẽ thất bại
  • Một lệnh gọi tới
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    37 (sẽ tạo ra một lệnh gọi hàm trong SQL)
  • Một cuộc gọi đến
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    38 (sẽ trích dẫn tên cột)

nhóm

Cú pháp để nhóm và sắp xếp giống nhau, ngoại trừ việc nhóm không chấp nhận hướng làm đối số cuối cùng của mảng (không có

Model.findAll({
attributes: ['foo', 'bar']
});
32,
Model.findAll({
attributes: ['foo', 'bar']
});
33,
Model.findAll({
attributes: ['foo', 'bar']
});
34, v.v.)

Bạn cũng có thể chuyển trực tiếp một chuỗi tới

Model.findAll({
attributes: ['foo', 'bar']
});
27, chuỗi này sẽ được đưa trực tiếp (nguyên văn) vào SQL được tạo. Thận trọng khi sử dụng và không sử dụng với nội dung do người dùng tạo

Làm cách nào để tạo phân trang trong NodeJS?

2. 2. 1 Thiết lập phụ thuộc. Điều hướng đến thư mục dự án và chạy npm init -y để tạo gói. tập tin json. .
2. 2. 2 Tạo tệp chỉ mục. Thêm mã vào tệp chỉ mục sẽ bao gồm các điểm cuối API để hiểu chi tiết về phân trang

Phân trang hoạt động như thế nào trong nút JS?

Phân trang trong NodeJS được định nghĩa là thêm các số để xác định số thứ tự của các trang . Trong phân trang, chúng tôi đã từng bỏ qua và giới hạn để giảm kích thước dữ liệu trong cơ sở dữ liệu khi chúng có số lượng rất lớn.

Phân trang phía máy chủ hoạt động như thế nào?

Phân trang phía máy chủ yêu cầu tải từng trang riêng lẻ khi điều hướng . Máy chủ cần hỗ trợ phân trang và sau đó phía máy khách có thể yêu cầu các bộ dữ liệu với kích thước trang, chỉ mục trang được chỉ định và có thể sắp xếp thứ tự và tiêu chí lọc.