Skip to content

Ankcorn/express-tcomb-validation-middleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tcomb Validation Middleware

Express Middleware that performs runtime type checking of objects. It is primerily meant for type checking in development.

CircleCI

Coverage Status

Known Vulnerabilities

Installation

npm i tcomb-validation-middleware

Usage

Use the library tcomb to define the model of the data structure

const t = require('tcomb');

const test = t.struct({
  test: t.String,
  bool: t.Boolean,
});

module.exports = {
  test,
};

Then add as middleware to the route of the endpoint

const t = require('tcomb-validation-middleware');

... //Express setup stuff

app.post('/test', t(test), (req, res) => {
  res.send({ message: 'schema was obviously valid' });
});

The module also accepts an options object like so

t(test,{ active: true, verboseErrors: false })

Tests

To run the tests do

npm test

Performance

Applying strict type validation to your server will decrease it's performance slightly under heavy loads but the tradeoff of very usefull error messages can make it worth it. If in production in an environment where you control the client it's very easy to reuse your tcomb schemas. This allows you to move the validation client side without much development overhead.

The results in the table below are generated using artillery.

First Header Scenarios launched Scenarios completed Requests completed RPS sent Request latency min max median p95 p99 Scenario duration min max median p95 p99
Enabled 1000 1000 20000 970.87 -> 0.3 41.4 0.4 2.8 11.7 -> 14.5 447.2 18.7 98 384.6
Disabled 1000 1000 20000 970.4 -> 0.2 24.2 0.4 1.6 3.5 -> 11 124.8 16.6 48.6 108.1

If you would like to verify them clone the module from git then run the following commands.

cd express-tcomb-validation-middleware
npm install
node ./test/lib/index.js

Then in another window run

npm install -g artillery
artillery quick --count 1000 -n 20 http://localhost:4444/test/on/test/hi
artillery quick --count 1000 -n 20 http://localhost:4444/test/off/test/hi

Built with

Contributing

Make a github issue if you have any feature requests or problems. I welcome pull requests as long as they have the relevent tests included.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

About

Express Middleware that performs runtime type checking for your api endpoints.

Resources

License

Stars

Watchers

Forks

Packages

No packages published