| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | let _ = require('lodash');module.exports = function (default_sort, default_offset, default_limit, max_limit) {	/**	 * This will setup the req query params with filtered data and defaults	 *	 * sort    will be an array of fields and their direction	 * offset  will be an int, defaulting to zero if no other default supplied	 * limit   will be an int, defaulting to 50 if no other default supplied, and limited to the max if that was supplied	 *	 */	return function (req, res, next) {		req.query.offset = typeof req.query.limit === 'undefined' ? default_offset || 0 : parseInt(req.query.offset, 10);		req.query.limit  = typeof req.query.limit === 'undefined' ? default_limit || 50 : parseInt(req.query.limit, 10);		if (max_limit && req.query.limit > max_limit) {			req.query.limit = max_limit;		}		// Sorting		let sort       = typeof req.query.sort === 'undefined' ? default_sort : req.query.sort;		let myRegexp   = /.*\.(asc|desc)$/ig;		let sort_array = [];		sort = sort.split(',');		_.map(sort, function (val) {			let matches = myRegexp.exec(val);			if (matches !== null) {				let dir = matches[1];				sort_array.push({					field: val.substr(0, val.length - (dir.length + 1)),					dir:   dir.toLowerCase()				});			} else {				sort_array.push({					field: val,					dir:   'asc'				});			}		});		// Sort will now be in this format:		// [		//    { field: 'field1', dir: 'asc' },		//    { field: 'field2', dir: 'desc' }		// ]		req.query.sort = sort_array;		next();	};};
 |