使用mysql在nodejs中进行分页

在我的项目中,我需要使用分页查询数据库,并提供用户根据当前search结果进行查询的function。 有点像限制,我无法find任何使用nodejs的东西。 我的后端是MySQL,我正在写restapi。

你可以尝试这样的事情(假设你使用Express 4.x)。

使用GET参数(这里的页面是你想要的页面结果的数量,npp是每个页面的结果数量)。

在这个例子中,查询结果在响应有效载荷的results字段中设置,而分页元数据在pagination字段中设置。

至于基于当前search结果进行查询的可能性,您将不得不扩大一点,因为您的问题有点不清楚,我想这就是为什么它已经被低估了(请试用用户,对新来者善待,尝试和不要把它们从头开始!)。

 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(); } 

这里是这个例子的package.json文件:

 { "name": "stackoverflow-pagination", "dependencies": { "bluebird": "^3.3.3", "body-parser": "^1.15.0", "express": "^4.13.4", "mysql": "^2.10.2" } }