@zishone/monique
Version:
A middleware that utilized rsql-mongodb to parse url queries into mongodb filter and options. Who's monqique? It is not a who, it's just short for Mongo I Query.
69 lines • 2.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mquery = void 0;
const http_errors_1 = __importDefault(require("http-errors"));
const rsql_mongodb_1 = __importDefault(require("rsql-mongodb"));
const mquery = () => {
return (req, _res, next) => {
try {
req.mquery = {
filter: {},
options: {},
};
try {
if (typeof req.query.filter === 'string') {
req.mquery.filter = rsql_mongodb_1.default(req.query.filter);
}
}
catch (error) {
throw http_errors_1.default(400, 'Filter invalid', {
type: 'mquery.parse.failed',
details: error,
});
}
req.mquery.options.projection = {};
if (typeof req.query.fields === 'string') {
req.query.fields.split(';').forEach((key) => {
req.mquery.options.projection[key] = 1;
});
}
req.mquery.options.sort = {};
if (typeof req.query.sort === 'string') {
req.query.sort.split(';').forEach((sort) => {
const keyValue = sort.split('==');
switch (keyValue[1]) {
case 'desc':
req.mquery.options.sort[keyValue[0]] = -1;
break;
case 'asc':
case undefined:
req.mquery.options.sort[keyValue[0]] = 1;
break;
default:
throw http_errors_1.default(400, 'Sort invalid', { type: 'mquery.parse.failed' });
}
});
}
req.mquery.options.limit = 0;
if (typeof req.query.limit === 'string') {
req.mquery.options.limit = parseFloat(req.query.limit);
}
req.mquery.options.skip = 0;
if (typeof req.query.skip === 'string') {
req.mquery.options.skip = parseFloat(req.query.skip);
}
if (typeof req.query.page === 'string') {
req.mquery.options.skip = (parseFloat(req.query.page) - 1) * (req.mquery.options.limit || 1);
}
next();
}
catch (error) {
next(error);
}
};
};
exports.mquery = mquery;
//# sourceMappingURL=mquery.js.map