Proper way to manage paging and search/filter on a REST API made with Node and Express

I am playing around with Node and Express. My current problem is not "how to do things", as I have my paging and filtering/searching working in my "mini API" that I have made from scratch and that I am playing with. My question is more about "good practices" and "proper way" of doing things.

I will put some snippets of code below, which I am sure will bring some critics. The API is memory based, no database involved. I have an array of hard-coded users that I am pulling data from and pushing data in.

Below is my code (as you can see, I have also implemented basic authentication using passport):

//This array contains all my user data...
var users = [
  {
    "id": "1",
    "firstName": "john",
    "lastName": "doe"
  }
];

//This is the route I have configured in order to retrieve all users.
//I am retrieving the users with the getUsers() function and then returning it.
//in the response object.

router.get('/users', passport.authenticate('basic', { session: false }), 
    function(req, res, next) {
      var result = users.getUsers(req);
      res.status(200).json({ users: result });
    });


//This method will get the page and items parameters and will try to parse
//them. After that, it will call the search function that will filter the data
//Finally, I am passing the result array, page param and items param to the
//sliceUsers() function that will take care of slicing the result array depending
//on the values of page and items.
exports.getUsers = function(req) {
  console.log(req.query);
  var page = req.query.page;
      items = req.query.items;
  page = page !== 'undefined' ? parseInt(page, 10) : undefined;
  items = items !== 'undefined' ? parseInt(items, 10) : undefined;

  //The search method will filter the data
  var searchResults = exports.search(req.query);
  //Then, I call sliceUsers(), passing the filtered data, page and items parameters
  return exports.sliceUsers(searchResults , page, items);
}


//This method will slice the array to return the page and # of items specified
//The "data" array that is passed as the first parameters is the array that contains
//the data that have already been filtered.
exports.sliceUsers= function(data, page, items) {
  page = (page < 1 ? 1 : page) || 1;
  items = (items < 1 ? 5 : items) || 5;
  console.log('page', page, 'items', items);
  var indexStart, indexEnd;
  indexStart = (page - 1) * items;
  indexEnd = indexStart + items;
  return data.slice(indexStart, indexEnd);
};


//Those 2 methods take care of filtering
exports.search = function(query) {
    return users.filter(search(query));
}

function search(query) {
  console.log('search function');
  return function(element) {
    for(var i in query) {
      //Please note here how I am checking the the parameter I am currently
      //checking is NOT 'page' nor 'items'
      if(query[i] != element[i] && i !== 'page' && i !== 'items') {
        return false;
      }
    }
    return true;
  }
}

A few questions arise here:

  • Is the way I am dealing with filter/search and THEN, dealing with paging the right way?
  • In the search() function, when I am looping over req.query, I know that the way I check if the current param is different than 'page' or 'items' is not very efficient, but I don't know I could do that differently.
  • My goal here is to learn node and express and get better at javascript, what would you advice me to do next in order to pursue that goal? Any resources greatly appreciated, as the only stuff I found on APIs are basic operations that don't really deal with search/filtering. When I do find those, it's never in addition to paging for example. I have never found a complete example.
  • I have heard that underscore could help me do the filtering, but once again, did not really find any good example, any snippets somewhere?
  • Any critic GREATLY appreciated.

P.S: I apologize in advance for any grammatical error in this question.