当前位置: 首页 > 面试题库 >

使用MySQL在Node.js中分页

太叔烨霖
2023-03-14
问题内容

在我的项目中,我需要使用分页查询数据库,并为用户提供基于当前搜索结果进行查询的功能。像极限之类的东西,我找不到与Node.js一起使用的东西。我的后端是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"
  }
}


 类似资料:
  • 我已经通读了AWS关于分页的文档: 根据他们的文件规定: 在响应中,DynamoDB返回限制值范围内的所有匹配结果。例如,如果发出限制值为6且没有筛选器表达式的查询或扫描请求,DynamoDB将返回表中与请求中指定的键条件匹配的前六项(或者在没有筛选器的扫描情况下仅返回前六项) 这意味着,给定我有一个名为的表,其属性称为(可以接受从到的任何数值),我可能会遇到以下难题: 客户提出请求,思考

  • 问题内容: 因此,我正在编写一个小的辅助方法,使用将该数字转换为有效的货币格式()。在Chrome中使用时,一切正常,但是在Node.js中使用时,似乎完全坏了。 例: 如果在浏览器中运行此命令,它将显示。如果您在Node.js REPL或应用程序中运行此代码段,则它将作为字符串返回。 猜猜这是Node.js的错误吗?您可以在这里进行周围的工作吗? 问题答案: 基于此问题,似乎决定将具有国际化的n

  • 问题内容: 如果使用https://github.com/felixge/node- mysql之类的 东西,如何将大量插入MySQL中 问题答案: 使用嵌套数组可以进行大容量插入,请参见github页面 嵌套数组变成分组列表(用于批量插入),例如 变成 您只需插入一个嵌套的元素数组。 这里给出一个例子 注意:是一个包装在数组中的数组数组 还有用于批量插入的完全不同的node-msql软件包

  • 问题内容: 我有下表: 并且我正在寻找“ piper”所在的每个委员会中的教授(答案应该是吹笛者和账单): 我有以下SQL除法查询,但它是错误的,我无法弄清楚问题出在哪里(不退还账单,只是吹笛者): 有人可以帮我吗?谢谢, 问题答案: 您最内在的选择在其where子句中不使用任何内容,因此它总是在寻找一些东西供吹笛者使用。尝试

  • 本文向大家介绍在MySQL中使用LIMIT进行分页的方法,包括了在MySQL中使用LIMIT进行分页的方法的使用技巧和注意事项,需要的朋友参考一下 今天看一个水友说他的MySQL现在变的很慢。问什么情况时。说单表超过2个G的一个MyISAM。真垃圾的回答方式。     简单答复:换一个强劲的服务器。换服务器很管用的:) ………        最终让取到慢查询:   如:             看

  • 问题内容: 如果使用https://github.com/felixge/node- mysql之类的 东西,如何将大量插入MySQL中 问题答案: 使用嵌套数组可以进行大容量插入,请参见github页面 嵌套数组变成分组列表(用于批量插入),例如 变成 您只需插入一个嵌套的元素数组。 这里给出一个例子 注意:是一个包装在数组中的数组数组 还有用于批量插入的完全不同的node-msql软件包