mysql - node - sequelize findall pagination
PaginaciĆ³n en nodejs con mysql (1)
Podría intentar algo así (suponiendo que usa Express 4.x).
Use los parámetros GET (esta es la cantidad de resultados de página que desea, y npp es la cantidad de resultados por página).
En este ejemplo, los resultados de la consulta se establecen en el campo de results
de la carga de respuesta, mientras que los metadatos de paginación se configuran en el campo de pagination
.
En cuanto a la posibilidad de consultar en función del resultado de la búsqueda actual, tendrías que expandir un poco, porque tu pregunta es poco clara, y supongo que es por eso que ha sido downvoted (por favor, experimenta usuarios, sé amable con los recién llegados y prueba ¡No los rechace desde el principio!).
var express = require(''express'');
var mysql = require(''mysql'');
var Promise = require(''bluebird'');
var bodyParser = require(''body-parser'');
var app = express();
var connection = mysql.createConnection({
host : ''localhost'',
user : ''myuser'',
password : ''mypassword'',
database : ''wordpress_test''
});
var queryAsync = Promise.promisify(connection.query.bind(connection));
connection.connect();
// do something when app is closing
// see http://stackoverflow.com/questions/14031763/doing-a-cleanup-action-just-before-node-js-exits
process.stdin.resume()
process.on(''exit'', exitHandler.bind(null, { shutdownDb: true } ));
var bodyParser = require(''body-parser'');
app.use(bodyParser.urlencoded({ extended: true }));
app.get(''/'', function (req, res) {
var numRows;
var queryPagination;
var numPerPage = parseInt(req.query.npp, 10) || 1;
var page = parseInt(req.query.page, 10) || 0;
var numPages;
var skip = page * numPerPage;
// Here we compute the LIMIT parameter for MySQL query
var limit = skip + '','' + skip + numPerPage;
queryAsync(''SELECT count(*) as numRows FROM wp_posts'')
.then(function(results) {
numRows = results[0].numRows;
numPages = Math.ceil(numRows / numPerPage);
console.log(''number of pages:'', numPages);
})
.then(() => queryAsync(''SELECT * FROM wp_posts ORDER BY ID DESC LIMIT '' + limit))
.then(function(results) {
var responsePayload = {
results: results
};
if (page < numPages) {
responsePayload.pagination = {
current: page,
perPage: numPerPage,
previous: page > 0 ? page - 1 : undefined,
next: page < numPages - 1 ? page + 1 : undefined
}
}
else responsePayload.pagination = {
err: ''queried page '' + page + '' is >= to maximum page number '' + numPages
}
res.json(responsePayload);
})
.catch(function(err) {
console.error(err);
res.json({ err: err });
});
});
app.listen(3000, function () {
console.log(''Example app listening on port 3000!'');
});
function exitHandler(options, err) {
if (options.shutdownDb) {
console.log(''shutdown mysql connection'');
connection.end();
}
if (err) console.log(err.stack);
if (options.exit) process.exit();
}
Aquí está el archivo package.json
para este ejemplo:
{
"name": "stackoverflow-pagination",
"dependencies": {
"bluebird": "^3.3.3",
"body-parser": "^1.15.0",
"express": "^4.13.4",
"mysql": "^2.10.2"
}
}
En mi proyecto, necesito consultar el archivo db con la paginación y proporcionar al usuario la funcionalidad para consultar en función del resultado de la búsqueda actual. Algo así como limit, no puedo encontrar nada para usar con nodejs. Mi backend es mysql y estoy escribiendo una API de descanso.