sql >> データベース >  >> RDS >> Mysql

mysqlを使用したnodejsでのページネーション

    そのようなことを試すことができます(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"
      }
    }
    


    1. Hibernateを使用してStruts2のmySqlDBからjspページに画像(bolbタイプ)を表示する方法

    2. org.postgresql.util.PSQLException:列インデックスが範囲外です:3、列数:2

    3. 警告:mysqli_connect():(28000/1045):ユーザーのアクセスが拒否されました

    4. Postgresql9.2pg_dumpバージョンの不一致