56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
|
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();
|
||
|
};
|
||
|
};
|