express-universal-query-validator

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

Showing:

Popularity

Downloads/wk

27

GitHub Stars

5

Maintenance

Last Commit

5yrs ago

Contributors

4

Package

Dependencies

0

Size (min+gzip)

0.6KB

License

MIT

Type Definitions

Tree-Shakeable

Yes?

Categories

Readme

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

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100