Necesito ayuda o consejo sobre cómo manejar esto. Estoy trabajando en un proyecto de nodo/mysql. Necesito paginar mis datos que he logrado implementar con éxito. Ahora solo tengo un problema que me ha llevado más de dos días tratando de resolver en vano. Cuando un usuario busca en mi sitio y supongamos que los resultados de la búsqueda tienen más de 100 registros, necesito paginar estos resultados en la interfaz. Ahora el problema es, ¿cómo mantengo la consulta de búsqueda cuando el usuario hace clic en la página 2 o 3? La situación en este momento es que cuando el usuario busca, el registro de la primera página se devuelve correctamente y bien paginado, pero cuando hace clic en la página 2, el la consulta de búsqueda ya no está. así que estoy tratando de descubrir cómo mantener esta búsqueda de consulta en mi aplicación para que cuando busque 1000 registros, se puedan paginar y pueda navegar con éxito en cada página que contenga los resultados de la búsqueda.
este es mi código de paginación de backend en este momento con la paginación y mi plantilla de frontend es ejs
app.get('/jobs', (req, res) => { db.query(sql, (err, result) => { if(err) throw err; const numOfResults = result.length; const numberOfPages = Math.ceil(numOfResults / resultsPerPage); let page = req.query.page ? Number(req.query.page) : 1; if(page > numberOfPages){ res.redirect('/?page='+encodeURIComponent(numberOfPages)); }else if(page < 1){ res.redirect('/?page='+encodeURIComponent('1')); } //Determine the SQL LIMIT starting number const startingLimit = (page - 1) * resultsPerPage; //Get the relevant number of POSTS for this starting page sql = `SELECT * FROM photos LIMIT ${startingLimit},${resultsPerPage}`; db.query(sql, (err, result)=>{ if(err) throw err; let iterator = (page - 5) < 1 ? 1 : page - 5; let endingLink = (iterator + 9) <= numberOfPages ? (iterator + 9) : page + (numberOfPages - page); if(endingLink < (page + 4)){ iterator -= (page + 4) - numberOfPages; } res.render('index', {data: result, page, iterator, endingLink, numberOfPages}); }); }); });