paginacija

Пагінація

загальні властивості:

  • perPage - ліміт записів на сторінці. Кількість записів чи об'єктів, які повинні бути включені на кожній сторінці
  • page - номер поточної сторінки, яку переглядає користувач
  • totalItems - загальна кількість записів чи об'єктів у всьому наборі даних
  • totalPages - загальна кількість сторінок, яка визначається за формулою Math.ceil(totalItems / perPage)
  • hasPreviousPage - прапор, який вказує, чи є для поточного запиту попередня сторінка
  • hasNextPage - прапор, який вказує, чи є для поточного запиту наступна сторінка

Під час створення бекенду ми не можемо довіряти всьому, що надсилає нам клієнт (фронтенд). Він може вислати невалідні значення або взагалі про них забути. Тому ми маємо обов’язково створити логіку парсингу параметрів пошуку. Функція parseNumber призначена для перетворення рядкових значень в числа і є особливо корисною в контекстах, де ми не можемо бути впевнені у типі даних, що надходять. Вона приймає два параметри: number, що є значенням для перетворення, та defaultValue, яке використовується як запасне, якщо перетворення неможливе.

// src/utils/parsePaginationParams.js

const parseNumber = (number, defaultValue) => {
  const isString = typeof number === 'string';
  if (!isString) return defaultValue;

  const parsedNumber = parseInt(number);
  if (Number.isNaN(parsedNumber)) {
    return defaultValue;
  }

  return parsedNumber;
};

Приклад використання

// src/utils/parsePaginationParams.js

/* Інший код файлу */

export const parsePaginationParams = (query) => {
  const { page, perPage } = query;

  const parsedPage = parseNumber(page, 1);
  const parsedPerPage = parseNumber(perPage, 10);

  return {
    page: parsedPage,
    perPage: parsedPerPage,
  };
};
// src/controllers/students.js

import { parsePaginationParams } from '../utils/parsePaginationParams.js';

/* Решта коду файла */

export const getStudentsController = async (req, res) => {
  const { page, perPage } = parsePaginationParams(req.query);
  const students = await getAllStudents({
    page,
    perPage,
  });

  res.json({
    status: 200,
    message: 'Successfully found students!',
    data: students,
  });
};
  • /sites/data/pages/paginacija.txt
  • Последнее изменение: 2024/06/08 08:21
  • tro