Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

express-contract

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-contract

A middleware for express that to validate inputs of your REST API with Joi, or any validators.

  • 2.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

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

const Joi = require("joi"); // Or any schema validator (must have a .validate() method)
const contract = require("express-contract").contract;

const schema = 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 errors

    res.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 method
app.post("/api/user", contract(schema, "query"), function (req, res) {
  if (!req.compliance) {
    // Look at req.violation for validation errors

    res.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 errors

      res.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!

Keywords

FAQs

Package last updated on 26 Nov 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc