2.0.0 • Published 4 years ago
express-contract v2.0.0
express-contract 
express-contract is a small project that add contract validation to your API.
Installation
yarn add express-contractnpm install --save express-contractUsage
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.complianceto know if the contract is respectedreq.bodyto access the object return by validatorreq.originalBodyto access original object return by validatorreq.queryto access the object return by validator (GET only)req.originalQueryto access original object return by validator (GET only)req.violationfor 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.