Skip to content

eduardo-matos/magic-query

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Packages

No packages published