TransWikia.com

Paginação com NodeJS e MongoDB

Stack Overflow em Português Asked by Marcos Colares on November 19, 2021

Olá colegas programadores!

Estou enfrentando um problema a dias e gostaria da ajuda de vocês para solucionar.

Estou criando um projeto em NodeJS e MongoDB. Ele consulta o banco de dados de acordo com o que o usuário digita e trás os resultados em uma lista. Por enquanto uso o NodeJS puro e bootstrap.

O meu próximo passo é criar uma paginação simples, pois a lista de itens que sai nos resultados é enorme.

Mas como sou muito noob ainda no assunto, estou em busca da ajuda de vocês.

Segue abaixo o meu index.js

const express = require('express');
const router = express.Router();
const morgan = require("morgan");
const bodyParser = require('body-parser');
const path = require("path");
const mongoose = require('mongoose');

function simplify(text) {
    const separators = /[s,.;:()-'+]/g;
    const diacritics = /[u0300-u036f]/g;

    //capitalização e normalização
    text = text.toUpperCase().normalize("NFD").replace(diacritics, "");

    //separando e removendo repetidos
    const arr = text.split(separators)
        .filter((item, pos, self) => self.indexOf(item) == pos);
    console.log(arr);

    //removendo nulls, undefineds e strings vazias
    return arr.filter(item => (item));
}

router.get('/search', function (req, res) {
    res.render('search', {
        title: 'Pesquisa'
    });
});

router.get('/about', function (req, res) {
    res.render('about', {
        title: 'Sobre'
    });
});

router.get('/', function (req, res, next) {
    if (!req.query.q)
        return res.render('index',
            {
                title: 'Site',
                rb: [], query: ''
            });
    else {
        const query = simplify(req.query.q);
        const mongoClient = require("mongodb").MongoClient;
        mongoClient.connect("mongodb://localhost:27017", {
            useNewUrlParser: true,
            useUnifiedTopology: true
        })
            .then(conn => conn.db("search-db"))
            .then(
                db => db.collection("tags")
                    .find({ tags: { $all: query } }, { title: { $all: query } })
                    .skip(10)
                    .limit(10)
            )
            .then(cursor => cursor.toArray())
            .then(rb => {
                return res.render('search',
                    {
                        title: 'Pesquisa',
                        rb, query: req.query.q
                    });
            })
    }
});

module.exports = router;

One Answer

A solução para esse problema é passar mais um query param para a sua rota, indicando a quantidade de itens que deverão ser "pulados". O que está acontecendo hoje é que você sempre está "pulando" 10 documentos e retornando os próximos 10.

Answered by César Felipe on November 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP