1.1.1 • Published 8 years ago
magic-query v1.1.1
Magic Query
Parses url encoded parameters to useful JavaScript objects.
Getting started
Basic
npm install magic-queryconst { magicQuery, Type } = require('magic-query');
const app = require('express')();
// configure fields
const middleware = magicQuery({
id: Type.integer(),
name: Type.string(),
height: Type.float(),
valid: Type.boolean(),
birth: Type.date(),
friends: Type.array(),
});
// GET /?id=4&name=John&height=1.78&valid=no&birth=1987-01-16&friends=kevin,elisa
app.get('/', middleware, (req, res) => {
console.log(req.q); // {id: 4, name: 'John', height: 1.78, valid: false, birth: Date(1987, 0, 16), friends: ['kevin', 'elisa']}
});Custom types
const middleware = magicQuery({
height: value => parseFloat(value) * 3.28084, // meters to feet
});
// GET /?height=1.78
app.get('/', middleware, (req, res) => {
console.log(req.q); // {height: 5.8398952}
});Getting values from other fields
const middleware = magicQuery({
billingStart: function() {
moment(this.billing, 'DD-MM-YYYY').format('YYYY-MM-DD 00:00:00');
},
billingEnd: function(value) {
moment(this.billing, 'DD-MM-YYYY').format('YYYY-MM-DD 23:59:59');
},
});
// GET /?billing=01-02-2003
app.get('/', middleware, (req, res) => {
console.log(req.q); // {billingStart: '2003-02-01 00:00:00', billingEnd: '2003-02-01 23:59:59'}
});Configure default value
const middleware = magicQuery({
name: Type.string({ default: 'unknown' }),
dateCreated: Type.date({ default: () => new Date() }),
});
// GET /?
app.get('/', middleware, (req, res) => {
console.log(req.q); // {name: 'unknown', dateCreated: Date(...)}
});Native parsers
Type.integer- default:
0
- default:
Type.string- default:
''
- default:
Type.float- default:
0.0
- default:
Type.boolean- default:
false
- default:
Type.date- default:
undefined - format:
YYYY-MM-DD
- default:
Type.array- default:
[] - delimiter:
,
- default: