В этом уроке вы узнаете, как выполнять пагинацию с использованием предложений OFFSET и FETCH в Node.js.
Этот урок начинается с того места, где закончился урок «Выбор данных из таблицы в Node.js».
Пагинация — это метод разбиения большого набора данных на более мелкие, более управляемые фрагменты(страницы) для целей отображения.
В SQL Server можно совместно использовать предложения OFFSET и FETCH для реализации пагинации.
Пагинация с использованием предложений OFFSET и FETCH
Мы извлечем данные из таблицы Authors, используя предложения OFFSET и FETCH.
Шаг 1. Измените файл select.js и определите новую функцию findAuthors, которая извлекает авторов с помощью предложений OFFSET и FETCH:
async function findAuthors(limit = 5, offset = 0) {
try {
// Connect to the database
const pool = await sql.connect(config);
// Execute a query
const result = await pool
.request()
.input('offset', sql.Int, offset)
.input('limit', sql.Int, limit)
.query(
`SELECT * FROM Authors
ORDER BY FirstName
OFFSET @offset ROWS
FETCH FIRST @limit ROWS ONLY`
);
return result.recordset;
} catch(err) {
console.error('Error finding authors:', err);
}
}
Как это работает.
Сначала подключитесь к SQL Server:
const pool = await sql.connect(config);
Во-вторых, извлеките авторов, используя предложения OFFSET и FETCH, отсортированные по FirstName в порядке возрастания:
const result = await pool
.request()
.input('offset', sql.Int, offset)
.input('limit', sql.Int, limit)
.query(
`SELECT * FROM Authors
ORDER BY FirstName
OFFSET @offset ROWS
FETCH FIRST @limit ROWS ONLY`
);
В этом заявлении:
- pool.request() создает новый экземпляр Request, представляющий запрос для выполнения к базе данных.
- .input(name, type, value) определяет входные параметры для запроса. В этом случае мы используем его для определения трех параметров offset и limit.
- .query(sqlQuery) выполняет SQL-запрос, используя входные параметры offset, limit и sort.
В-третьих, верните набор записей:
return result.recordset;
Шаг 2. Экспортируйте функцию findAuthors с другими функциями:
export { findAuthorById, findAuthorsByLastName, findAuthors };
Шаг 3. Измените index.js для использования функции findAuthors:
import { findAuthors } from './select.js';
const authors = await findAuthors(5);
for(const { AuthorID, FirstName, LastName } of authors) {
console.log(`${AuthorID} - ${FirstName} ${LastName}`);
}
Выход:
2 - Agatha Christie 5 - Agatha Christie 9 - Charles Dickens 22 - Emily Bronte 11 - Ernest Hemingway
Как это работает.
Сначала импортируйте findAuthors из модуля select.js:
import { findAuthors } from './select.js';
Во-вторых, вызовите функцию findAuthors, чтобы получить первых 5 авторов, отсортированных по их именам:
const authors = await findAuthors(5);
В-третьих, отобразите на консоли идентификатор автора, его имя и фамилию:
for(const { AuthorID, FirstName, LastName } of authors) {
console.log(`${AuthorID} - ${FirstName} ${LastName}`);
}
Чтобы получить следующих 5 авторов, вы можете передать второй аргумент следующим образом:
const authors = await findAuthors(5, 5);
Он вернет следующие записи:
10 - F. Scott Fitzgerald 7 - George Orwell 1 - George Orwell 18 - H.G. Wells 17 - Harper Lee
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте предложения OFFSET и FETCH для реализации функции разбиения на страницы при выборе данных.

