Skip to content

Latest commit

 

History

43 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Magic Query

Build Status Coverage Status

Parses url encoded parameters to useful JavaScript objects.

Getting started

Basic

npm install magic-query
const { 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

  1. Type.integer

    • default: 0
  2. Type.string

    • default: ''
  3. Type.float

    • default: 0.0
  4. Type.boolean

    • default: false
  5. Type.date

    • default: undefined
    • format: YYYY-MM-DD
  6. Type.array

    • default: []
    • delimiter: ,

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages