Преглед изворни кода

perf: pagination, filter and sort on backend

contact
ntasicc пре 3 година
родитељ
комит
d5c6422d2d
1 измењених фајлова са 26 додато и 4 уклоњено
  1. 26
    4
      pages/api/product/index.js

+ 26
- 4
pages/api/product/index.js Прегледај датотеку

@@ -6,7 +6,9 @@ async function handler(req, res) {

await dbConnect();

const pageIndex = req.query.page;
const pageIndex = req.query.pageIndex;
const category = req.query.category === 'All' ? '' : req.query.category;
const filterType = req.query.filterType;

if (pageIndex < 1) {
res.status(422).json({
@@ -18,13 +20,17 @@ async function handler(req, res) {
switch (method) {
case 'GET': {
try {
const productCount = await Product.countDocuments();
const productCount = await Product.find({
category: { $regex: category },
}).countDocuments();

if (productCount === 0) {
res.status(200).json({
message: 'There are currently no products in our database.',
product: [],
productCount: 0,
next: null,
previous: null,
});
break;
}
@@ -33,18 +39,34 @@ async function handler(req, res) {
throw new Error('Page does not exist!');
}

const product = await Product.find({})
const product = await Product.find({ category: { $regex: category } })
.skip((pageIndex - 1) * 9)
.limit(9);
.limit(9)
.sort(filterType === 'asc' ? 'name' : '-name ');

if (!product) {
throw new Error('There are currently no products in our database.');
}

const previousUrl =
pageIndex > 1
? `https://localhost:3000/api/product?pageIndex=${
parseInt(pageIndex) - 1
}`
: null;
const nextUrl =
pageIndex * 9 < productCount
? `https://localhost:3000/api/product?pageIndex=${
parseInt(pageIndex) + 1
}`
: null;

res.status(200).json({
message: 'All products from our database were fetched successfully.',
product,
productCount,
next: nextUrl,
previous: previousUrl,
});
} catch (error) {
res.status(400).json({ message: error.message });

Loading…
Откажи
Сачувај