querymen-custom
v2.1.5
Published
Querystring parser middleware for MongoDB, Express and Nodejs
Downloads
128
Maintainers
Readme
Querymen
Querystring parser middleware for MongoDB, Express and Nodejs
Important: This is a fork from 'querymen'
https://github.com/diegohaz/querymen
Install
npm install --save querymen-custom
Examples
Pagination
Querymen has a default schema to handle pagination. This is the most simple and common usage.
var querymen = require('querymen');
app.get('/posts', querymen.middleware(), function(req, res) {
var query = req.querymen;
Post.find(query.query, query.select, query.cursor).then(function(posts) {
// posts are proper paginated here
});
});
User requests /posts?page=2&limit=20&sort=-createdAt
req.querymen will be:
req.querymen = {
query: {},
select: {},
cursor: {
limit: 20,
skip: 20,
sort: {createdAt: -1}
}
}
User requests /posts?q=term&fields=title,desc
req.querymen will be:
When user requests
/posts?q=term
, querymen parses it to{keywords: /term/i}
. It was designed to work with mongoose-keywords plugin, which adds akeywords
field to schemas (check that out).
req.querymen = {
query: {
keywords: /term/i
},
select: {
title: 1,
desc: 1
},
cursor: {
// defaults
limit: 30,
skip: 0,
sort: {createdAt: -1}
}
}
User requests /posts?fields=-title&sort=name,-createdAt
req.querymen will be:
req.querymen = {
query: {},
select: {
title: 0
},
cursor: {
limit: 30,
skip: 0,
sort: {
name: 1,
createdAt: -1
}
}
}
Custom schema
You can define a custom schema, which will be merged into querymen default schema (explained above).
var querymen = require('querymen');
app.get('/posts', querymen.middleware({
after: {
type: Date,
paths: ['createdAt']
operator: '$gte'
}
}), function(req, res) {
Post.find(req.querymen.query).then(function(posts) {
// ...
});
});
User requests /posts?after=2016-04-23
req.querymen will be:
req.querymen = {
query: {
createdAt: {$gte: 1461369600000}
},
select: {},
cursor: {
// defaults
limit: 30,
skip: 0,
sort: {createdAt: -1}
}
}
Error handling
// user requests /posts?category=world
var querymen = require('querymen');
var schema = new querymen.Schema({
category: {
type: String,
enum: ['culture', 'general', 'travel']
}
});
app.get('/posts', querymen.middleware(schema));
// create your own handler
app.use(function(err, req, res, next) {
res.status(400).json(err);
});
// or use querymen error handler
app.use(querymen.errorHandler())
Response body will look like:
{
"valid": false,
"name": "enum",
"enum": ["culture", "general", "travel"],
"value": "world",
"message": "category must be one of: culture, general, travel"
}
Contributing
This package was created with generator-rise. Please refer to there to understand the codestyle and workflow. Issues and PRs are welcome!
License
MIT © Diego Haz