Skip to content

Express middleware to provide consistently parseable query parameters to universal applications.

License

Notifications You must be signed in to change notification settings

danksim/express-universal-query-validator

 
 

Repository files navigation

express-universal-query-validator

Build Status Libraries.io for GitHub Coverage Status NPM version NPM downloads MIT License

Sauce Test Status

Express middleware to provide consistently parseable query parameters to universal applications.

Introduction

Normally, query parsing is handled by your server. For universal applications using something like react-router, this can be a problem when a different path is taken to parse query strings on the client vs the server.

For example, a Node express server will parse a malformed query like ?key=foo%% using the native Node.js querystring module to { key: 'foo%%' }. However, a client using decodeURIComponent will throw an error like URIError: URI malformed when encountering the same query.

This middleware solves this problem by validating each query parameter via decodeURIComponent and providing a callback to take action on the server when invalid params are detected. The default behavior when no callback is provided is to log and then redirect to the same path with unparseable params removed.

This package is tested in both Node.js and browsers to ensure the same behavior in both runtimes.

Usage

import express from 'express';
import queryValidator from 'express-universal-query-validator';

const app = express();

// Mount the middleware
app.use(queryValidator());

// Other route handlers
// ...

app.listen(process.env.PORT);
console.info(`Server listening on ${process.env.PORT} and handling invalid query parameters`);

Configuration

queryValidator accepts a callback that is executed when invalid params are detected, and a configuration object.

See API.md for detailed documentation.

Examples

function invalidParamHandler(req, res, next, context) {
    const { error, oldQuery, nextQuery, droppedParams } = context;

    // Do what you love
}

app.use(queryValidator(invalidParamHandler));

Development

In lieu of a formal style guide, please ensure PRs follow the conventions present, and have been properly linted and tested. Feel free to open issues to discuss.

Be aware this module is tested in both browser and node runtimes.

Available tasks

Build and test

Runs all tests, static analysis, and bundle for distribution

$ npm start

Test

Runs browser and node tests

$ npm test

Runs browser tests via PhantomJS only

$ npm run test:browser

Runs browser tests via SauceLabs only

$ SAUCELABS=true npm run test:browser

Runs node tests only

$ npm run test:node

Docs

Regenerate API.md docs from JSDoc comments

$ npm run docs

About

Express middleware to provide consistently parseable query parameters to universal applications.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%