1.0.2 • Published 2 years ago

@acruzjr/express-routes-versioning v1.0.2

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

Express routes versioning

Build Status npm version

A simple node.js module that provides routes versioning for express. You can use middleware easier using a middlewares vector.

Install

npm install @acruzjr/express-routes-versioning

Usage

Follows semver versioning format. Supports '^, ~' symbols for matching version numbers.

var app = require("express")();
var { routesVersioning } = require("@acruzjr/express-routes-versioning");

app.get(
  "/test",
  routesVersioning([
    { version: "1.0.0", handler: respondV1 },
    { version: "2.2.9", handler: [respondV2] },
    { version: "2.5.0", handler: [anyMiddleware, respondV3] },
  ])
);

//curl -s -H 'accept-version: 1.0.0' localhost:3000/test
// version 1.0.0 or 1.0 or 1 !
function respondV1(req, res, next) {
  res.status(200).send("ok v1");
}

//curl -s -H 'accept-version: ~2.2.0' localhost:3000/test
//curl -s -H 'accept-version: 2.2.9' localhost:3000/test
//Anything from 2.2.0 to 2.4.9
function respondV2(req, res, next) {
  res.status(200).send("ok v2");
}

//curl -s -H 'accept-version: ^2.2.0' localhost:3000/test
//curl -s -H 'accept-version: 2.5.0' localhost:3000/test
//curl -s -H 'accept-version: 3.0.0' localhost:3000/test
function anyMiddleware(req, res, next) {
  return next();
}
function respondV3(req, res, next) {
  res.status(200).send("ok v3");
}

app.listen(3000);

API

routesVersioning(versions)

versions - array, containing VersionHandler list.

VersionHandler {
    version: string;
    handler: RequestHandler[] | RequestHandler;
}

version - string, version in semver format as key

handler - RequestHandler[] or RequestHandler - function(s) callback (connect middleware format) to invoke when the request matches the version as value.

How version is determined for each request ?

Default behaviour is to use accept-version headers from the client.

How versions are matched ?

semver versioning format is used to match version, supports ^,~ symbols on the request headers.

Examples

Examples are available here

Test

npm test