node.js---sails项目开发(6)--- 实现分页功能

只需要添加一个文件即可  api/blueprints/find.js     代码如下

/**
 * Module dependencies
 */
var util = require('util'),
  actionUtil = require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');



/**
 * Find Records
 *
 *  get   /:modelIdentity
 *   *    /:modelIdentity/find
 *
 * An API call to find and return model instances from the data adapter
 * using the specified criteria.  If an id was specified, just the instance
 * with that unique id will be returned.
 *
 * Optional:
 * @param {Object} where       - the find criteria (passed directly to the ORM)
 * @param {Integer} limit      - the maximum number of records to send back (useful for pagination)
 * @param {Integer} skip       - the number of records to skip (useful for pagination)
 * @param {String} sort        - the order of returned records, e.g. `name ASC` or `age DESC`
 * @param {String} callback - default jsonp callback param (i.e. the name of the js function returned)
 */

module.exports = function findRecords (req, res) {

  // Look up the model
  var Model = actionUtil.parseModel(req);

  // If an `id` param was specified, use the findOne blueprint action
  // to grab the particular instance with its primary key === the value
  // of the `id` param.   (mainly here for compatibility for 0.9, where
  // there was no separate `findOne` action)
  if ( actionUtil.parsePk(req) ) {
    return require('./findOne')(req,res);
  }

  // Lookup for records that match the specified criteria
  var query = Model.find()
  .where( actionUtil.parseCriteria(req) )
  .limit( actionUtil.parseLimit(req) )
  .skip( actionUtil.parseSkip(req) )
  .sort( actionUtil.parseSort(req) );


  

  // TODO: .populateEach(req.options);
  query = actionUtil.populateRequest(query, req);
  query.exec(function found(err, matchingRecords) {
    if (err) return res.serverError(err);

    // Only `.watch()` for new instances of the model if
    // `autoWatch` is enabled.
    if (req._sails.hooks.pubsub && req.isSocket) {
      Model.subscribe(req, matchingRecords);
      if (req.options.autoWatch) { Model.watch(req); }
      // Also subscribe to instances of all associated models
      _.each(matchingRecords, function (record) {
        actionUtil.subscribeDeep(req, record);
      });
    }

    // get pagination info and wrap results in struct

    var metaInfo,
        criteria = actionUtil.parseCriteria(req),
        skip = actionUtil.parseSkip(req),
        limit = actionUtil.parseLimit(req);
    
    Model.count(criteria)
      .exec(function(err, total){
      if (err) return res.serverError(err);
      
      metaInfo = {
        start : skip,
        end : skip + limit,
        limit : limit,
        total : total,
        criteria: criteria
      };

      res.ok({info: metaInfo, items: matchingRecords});

    });
  });
};

  

重写路由(/:modelIdentity/find)

查看效果,请输入如下链接, 详情 请看我的github  https://github.com/shenggen1987/sails-demo.git

http://localhost:1337/order/find?limit=1&skip=1

{
  "info": {
    "start": 1,
    "end": 2,
    "limit": 1,
    "total": 2,
    "criteria": {}
  },
  "items": [
    {
      "name": "000",
      "age": 92,
      "phone": "15268155415",
      "createdAt": "2017-02-14T09:15:08.242Z",
      "updatedAt": "2017-02-14T09:15:08.242Z",
      "id": "58a2ca9c8a7b1e1500883405"
    }
  ]
}