A simple node.js module that provides routes versioning for express. You can use middleware easier using a middlewares vector.
npm install @acruzjr/express-routes-versioning
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 are available here
npm test