Skip to content

Repository files navigation

express-contract Build Status

express-contract is a small project that add contract validation to your API.

Installation

yarn add express-contract
npm install --save express-contract

Usage

constJoi=require("joi");// Or any schema validator (must have a .validate() method)constcontract=require("express-contract").contract;constschema=Joi.object().keys({username: Joi.string().alphanum().min(3).max(30).required(),});app.post("/api/user",contract(schema),function(req,res){if(!req.compliance){// Look at req.violation for validation errorsres.status(400).json({error: "Bad request",});return;}res.status(200).json(req.body);});

Variables:

  • req.compliance to know if the contract is respected
  • req.body to access the object return by validator
  • req.originalBody to access original object return by validator
  • req.query to access the object return by validator (GET only)
  • req.originalQuery to access original object return by validator (GET only)
  • req.violation for validation error

You can also precise the property to validate (usually body or query, but can be whatever you want), by default it's body, expect for GET requests.

// like /api/user?username=tot even if it's a POST methodapp.post("/api/user",contract(schema,"query"),function(req,res){if(!req.compliance){// Look at req.violation for validation errorsres.status(400).json({error: "Bad request",});return;}res.status(200).json(req.query);});

Or using multiple contract, but while not validate others contracts the previous failed.

app.post("/api/user",contract(schema_query,"query"),contract(schema_body,"body"),function(req,res){if(!req.compliance){// Look at req.violation for validation errorsres.status(400).json({error: "Bad request",});return;}res.status(200).json({query: req.query,body: req.body,});});

Actually, it was test with Joi, and need body-parser.

But should work with other validators if the .validate() method has the following signature:

Schema.validate(schema,callback(err,value));

value returned by the validator's callback is used to get defaults values that are set in the schema.

Keep in touch!

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages