В этом уроке вы узнаете, как выполнять пагинацию с использованием предложений 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 для реализации функции разбиения на страницы при выборе данных.