반응형
내 프로젝트에서 페이지 매김으로 db를 쿼리하고 현재 검색 결과를 기반으로 쿼리하는 기능을 사용자에게 제공해야합니다. 한계와 같은 것, nodejs와 함께 사용할 것을 찾을 수 없습니다. 내 백엔드는 mysql이고 나머지 API를 작성 중입니다.
해결 방법
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"
}
}
참조 페이지 https://stackoverflow.com/questions/35694504
반응형
'MySql' 카테고리의 다른 글
MySQL 인덱스는 어떻게 작동합니까? (0) | 2020.11.11 |
---|---|
MySQL 데이터베이스에서 Python 3.5.1을 사용하는 방법 (0) | 2020.11.11 |
MySQL NameError : 전역 이름 'MySQLdb'가 정의되지 않았습니다. (0) | 2020.11.11 |
MySQL where 문으로 mysql 대량 업데이트 (0) | 2020.11.11 |
MySQL Perl DBI fetchall_hashref (0) | 2020.11.11 |
댓글