gpt4 book ai didi

mysql - 使用mysql在nodejs中分页

转载 作者:可可西里 更新时间:2023-11-01 06:32:23 25 4
gpt4 key购买 nike

在我的项目中,我需要使用分页查询数据库,并为用户提供基于当前搜索结果进行查询的功能。像限制之类的东西,我找不到任何可以与 nodejs 一起使用的东西。我的后端是 mysql,我正在编写一个 rest api。

最佳答案

您可以尝试类似的操作(假设您使用 Express 4.x)。

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

在此示例中,查询结果设置在响应负载的 results 字段中,而分页元数据设置在 pagination 字段中。

关于是否可以根据当前搜索结果进行查询,你得展开一点,因为你的问题有点不清楚。

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

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 + ',' + 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"
}
}

关于mysql - 使用mysql在nodejs中分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35694504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com