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();
- };
- };
|