A Node.js express middleware that implements API versioning for route controllers

Overview

express-version-route

view on npm view on npm Build Codecov npm module downloads Known Vulnerabilities Security Responsible Disclosure

express-version-route

This npm package provides an ExpressJS middleware to load route controllers based on api versions.

Implementing API Versioning in 15 lines of code:

now any request would be handled with the appropriate route handler in accordance to request.version.

Usage

Create a map where the key is the version of the supported controller, and the value is a regular ExpressJS route function signature.

const versionRouter = require('express-version-route')

const routesMap = new Map()
routesMap.set('1.0', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you version 1.0'})
})

Then, on the route which you wish to version, call the route function of this module with the map you created:

router.get('/test', versionRouter.route(routesMap))

If no route matches the version requested by a client then the next middleware in the chain will be called. To set a route fallback incase no version matches set a 'default' key on the routes map, for example:

routesMap.set('default', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you, this is the default route'})
})

If maximal possible version (for example to get the latest bugfix) is necessary, then please specify useMaxVersion: true in route function, then the maximal possible version will be returned for your request. For example for 1.0 request, the version 1.0.2 will be returned:

const routesMap = new Map()
routesMap.set('1.0.0', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you version 1.0.0'})
})
routesMap.set('1.0.2', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you version 1.0.2'})
})

router.get('/test', versionRouter.route(routesMap,{useMaxVersion: true}))

Usage with TypeScript

import * as versionRouter from 'express-version-route'
import { Router, Handler } from 'express';

const router = Router();
const routesMap = new Map<string, Handler>();

routesMap.set('1.0', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you version 1.0'})
})

routesMap.set('default', (req, res, next) => {
  return res.status(200).json({'message': 'hello to you, this is the default route'})
})

router.get('/test', versionRouter.route(routesMap))

How it works

The Library

A requested version from the client must be available on the request object at req.version. You are encouraged to use this module's twin: express-version-request which is another simple ExpressJS middleware that populates req.version from the client's X-Api-Version header, Accept header or from a query string (such as 'api-version=1.0.0')

The key for the routes versions you define can be a non-semver format, for example: 1.0 or just 1. Under the hood, expression-version-route uses the semver module to check if the version found on the request object at req.version matches the route.

Client-Server flow

  1. An API client will send a request to your API endpoint with an HTTP header that specifies the requested version of the API to use:
curl --header "X-Api-Version: 1.0.0" https://www.example.com/api/users
  1. The express-version-request library will parse the X-Api-Version and sets ExpressJS's req.version property to 1.0.0.
  2. The express-version-route library, when implemented like the usage example above will match the 1.0 route version because semver will match 1.0.0 to 1.0, and then reply with the JSON payload {'message': 'hello to you version 1.0'}.

Installation

yarn add express-version-route

TypeScript Support

yarn add --dev @types/express-version-route

Note: Don't forget to add types for Express as well!

Tests

yarn test

Project linting:

yarn lint

Coverage

yarn test:coverage

Commit

The project uses the commitizen tool for standardizing changelog style commit messages so you should follow it as so:

git add .           # add files to staging
yarn commit      # use the wizard for the commit message

On API Versioning...

An API versioning is a practice that enables services to evolve their APIs with new changes, signatures and the overall API contract without interrupting API consumers and forcing them to repeatedly make changes in order to keep in pace with changes to APIs.

Several methodologies exist to version your API:

  • URL: A request specifies the version for the resource: http://api.domain.com/api/v1/schools/3/students
  • Query String: A request specifies the resource in a query string: http://api.domain.com/api/schools/3/students?api-version=1
  • Custom HTTP Header: A request to a resource http://api.domain.com/api/schools/3/students with a custom HTTP header set in the request X-Api-Version: 1
  • MIME Type content negotiation: A request to a resource http://api.domain.com/api/schools/3/students with an Accept header that specifies the requested content and its version: Accept: application/vnd.ecma.app-v2+json

There is no strict rule on which methodology to follow and each has their own pros and cons. The RESTful approach is the semantic mime-type content negotiation, but a more pragmatic solution is the URL or custom HTTP header.

Why API Versioning at all ?

Upgrading APIs with some breaking change would lead to breaking existing products, services or even your own frontend web application which is dependent on your API contract. By implementing API versioning you can ensure that changes you make to your underlying API endpoints are not affecting systems that consume them, and using a new version of an API is an opt-in on the consumer. read more...

Alternative Node.js libraries

Several npm projects exist which provide similar API versioning capabilities to ExpressJS projects, and I have even contributed Pull Requests to some of them that provide fixes or extra functionality but unfortunately they all seem to be unmaintained, or buggy.

Author

Liran Tal [email protected]

Comments
  • How to manage multiple middleware function

    How to manage multiple middleware function

    Most of my routes has more then one function in serving a request, Map is not allowing to add more then two params. Sample: route.post( '/customer', middlewares.isAuth, middlewares.hasAccess('customer', 'create'), async (req, res, next) => { // will add service function to add customer. return APIResponse.success(res, { message : 'success '}); }, );

    enhancement good-first-contribution 
    opened by arvindgemini 18
  • feature request: unsatisfiable version should call next with error

    feature request: unsatisfiable version should call next with error

    Hi.

    Clean package :).

    I'd like to request that the case that there's no matched version calls next with a specific error. My justification is that it allows much easier retirement of old versions when you no longer want to support them - and it can all be done in one place.

    The only workaround with the current implementation is to do it in a 'default', but you still have to scatter it throughout every route configuration.

    Thanks!

    enhancement 
    opened by captaincaius 7
  • Update eslint to the latest version ๐Ÿš€

    Update eslint to the latest version ๐Ÿš€

    The devDependency eslint was updated from 4.19.1 to 5.14.0.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Release Notes for v5.14.0
    • 85a04b3 Fix: adds conditional for separateRequires in one-var (fixes #10179) (#10980) (Scott Stern)
    • 0c02932 Upgrade: [email protected] (#11401) (Ilya Volodin)
    • 104ae88 Docs: Update governance doc with reviewers status (#11399) (Nicholas C. Zakas)
    • ab8ac6a Fix: Support boundary spread elements in sort-keys (#11158) (Jakub Roลผek)
    • a23d197 New: add allowSingleLineBlocks opt. to padded-blocks rule (fixes #7145) (#11243) (richie3366)
    • e25e7aa Fix: comma-spacing ignore comma before closing paren (fixes #11295) (#11374) (Pig Fang)
    • a1f7c44 Docs: fix space-before-blocks correct code for "classes": "never" (#11391) (PoziWorld)
    • 14f58a2 Docs: fix grammar in object-curly-spacing docs (#11389) (PoziWorld)
    • d3e9a27 Docs: fix grammar in โ€œthose who saysโ€ (#11390) (PoziWorld)
    • ea8e804 Docs: Add note about support for object spread (fixes #11136) (#11395) (Steven Thomas)
    • 95aa3fd Docs: Update README team and sponsors (ESLint Jenkins)
    • 51c4972 Update: Behavior of --init (fixes #11105) (#11332) (Nicholas C. Zakas)
    • ad7a380 Docs: Update README team and sponsors (ESLint Jenkins)
    • 550de1e Update: use default keyword in JSON schema (fixes #9929) (#11288) (Pig Fang)
    • 983c520 Update: Use 'readonly' and 'writable' for globals (fixes #11359) (#11384) (Nicholas C. Zakas)
    • f1d3a7e Upgrade: some deps (fixes #11372) (#11373) (่–›ๅฎš่ฐ”็š„็Œซ)
    • 3e0c417 Docs: Fix grammar in โ€œthereโ€™s nothing prevent youโ€ (#11385) (PoziWorld)
    • de988bc Docs: Fix grammar: Spacing improve -> Spacing improves (#11386) (PoziWorld)
    • 1309dfd Revert "Build: fix test failure on Node 11 (#11100)" (#11375) (่–›ๅฎš่ฐ”็š„็Œซ)
    • 1e56897 Docs: โ€œthe function actually useโ€: use -> uses (#11380) (PoziWorld)
    • 5a71bc9 Docs: Update README team and sponsors (ESLint Jenkins)
    • 82a58ce Docs: Update README team and sponsors (ESLint Jenkins)
    • 546d355 Docs: Update README with latest sponsors/team data (#11378) (Nicholas C. Zakas)
    • c0df9fe Docs: ... is not an operator (#11232) (Felix Kling)
    • 7ecfdef Docs: update typescript parser (refs #11368) (#11369) (่–›ๅฎš่ฐ”็š„็Œซ)
    • 3c90dd7 Update: remove prefer-spread autofix (fixes #11330) (#11365) (่–›ๅฎš่ฐ”็š„็Œซ)
    • 5eb3121 Update: add fixer for prefer-destructuring (fixes #11151) (#11301) (golopot)
    • 173eb38 Docs: Clarify ecmaVersion doesn't imply globals (refs #9812) (#11364) (Keith Maxwell)
    • 84ce72f Fix: Remove extraneous linefeeds in one-var fixer (fixes #10741) (#10955) (st-sloth)
    • 389362a Docs: clarify motivation for no-prototype-builtins (#11356) (Teddy Katz)
    • 533d240 Update: no-shadow-restricted-names lets unassigned vars shadow undefined (#11341) (Teddy Katz)
    • d0e823a Update: Make --init run js config files through linter (fixes #9947) (#11337) (Brian Kurek)
    • 92fc2f4 Fix: CircularJSON dependency warning (fixes #11052) (#11314) (Terry)
    • 4dd19a3 Docs: mention 'prefer-spread' in docs of 'no-useless-call' (#11348) (Klaus Meinhardt)
    • 4fd83d5 Docs: fix a misleading example in one-var (#11350) (่–›ๅฎš่ฐ”็š„็Œซ)
    • 9441ce7 Chore: update incorrect tests to fix build failing (#11354) (่–›ๅฎš่ฐ”็š„็Œซ)
    Commits

    The new version differs by 425 commits.

    • af9688b 5.14.0
    • 0ce3ac7 Build: changelog update for 5.14.0
    • 85a04b3 Fix: adds conditional for separateRequires in one-var (fixes #10179) (#10980)
    • 0c02932 Upgrade: [email protected] (#11401)
    • 104ae88 Docs: Update governance doc with reviewers status (#11399)
    • ab8ac6a Fix: Support boundary spread elements in sort-keys (#11158)
    • a23d197 New: add allowSingleLineBlocks opt. to padded-blocks rule (fixes #7145) (#11243)
    • e25e7aa Fix: comma-spacing ignore comma before closing paren (fixes #11295) (#11374)
    • a1f7c44 Docs: fix space-before-blocks correct code for "classes": "never" (#11391)
    • 14f58a2 Docs: fix grammar in object-curly-spacing docs (#11389)
    • d3e9a27 Docs: fix grammar in โ€œthose who saysโ€ (#11390)
    • ea8e804 Docs: Add note about support for object spread (fixes #11136) (#11395)
    • 95aa3fd Docs: Update README team and sponsors
    • 51c4972 Update: Behavior of --init (fixes #11105) (#11332)
    • ad7a380 Docs: Update README team and sponsors

    There are 250 commits in total.

    See the full diff

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 6
  • Update husky to the latest version ๐Ÿš€

    Update husky to the latest version ๐Ÿš€

    The devDependency husky was updated from 1.3.1 to 2.0.0.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Find out more about this release.

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 5
  • Add support for error objects

    Add support for error objects

    In order to use custom error objects instead of relying on their actual name strings we can create an errors/ directory with the errors on it. Internally in the program we can simply consumer that just like any other import and for external access projects can just require it as well like:

    const { CustomError } = require('express-version-route/errors/')
    

    where errors/ folder will have an index.js that will export all error classes

    cc @captaincaius

    good-first-contribution 
    opened by lirantal 4
  • fixes: #29 - feat: treat unmatched versions as error condition

    fixes: #29 - feat: treat unmatched versions as error condition

    also add one test to ensure first match wins

    NB before you merge: This branch breaks backwards compatibility so the error class can be exported. Feel free to let me know if you'd prefer to prioritize backward compatibility and keep the exports the same.

    I'd personally prefer to have the error type exported so we don't have to rely on the name, but if you'd like me to reroll this in a backward-compatible way I'd be happy to.

    One last thing - sorry about the not-so-related test, but to me it's still in the spirit of this issue (API version updates being awesomely maintainable).

    Thanks again!

    enhancement 
    opened by captaincaius 4
  • Update commitizen to the latest version ๐Ÿš€

    Update commitizen to the latest version ๐Ÿš€

    The devDependency commitizen was updated from 2.10.1 to 3.0.0.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Release Notes for v3.0.0

    <a name"3.0.0">

    3.0.0 (2018-10-01)

    Bug Fixes

    • resolve linux build issues, add git exit code 128 warning (c3764c8c)
    • deps:
    • package: Remove opencollective post-install hook (#561) (a70c234d)

    Features

    Breaking Changes

    • Older versions of Node.js are no longer supported

    Includes most updates with the exception of semantic-release which breaks on windows. To be investigated in a later release.
    (a70c063b)

    Commits

    The new version differs by 23 commits.

    • a70c063 feat: Drop support for Node.js <6.x, update dependencies (#566)
    • 0d76887 chore: remove sign from windows build
    • 1546df4 chore: assume yarn in tests
    • c3764c8 fix: resolve linux build issues, add git exit code 128 warning
    • f1150c8 chore: Create jobs build yml
    • f0595ed chore: add azure jobs
    • 4693079 chore: Set up CI with Azure Pipelines
    • d565215 feat: support initialization with yarn. fixes #527 (#549)
    • a70c234 fix(package): Remove opencollective post-install hook (#561)
    • d5b8bc5 docs(readme): add npx use examples (#532)
    • d103b10 chore(ci): test on Node.js 10.x (#531)
    • 41a921b BREAKING CHANGE: Remove Node 0.12 support (#524)
    • aa82496 fix(deps): update dependency glob to v7.1.2 (#506)
    • 4bda943 fix(deps): update dependency lodash to v4.17.10 (#507)
    • 67a4e16 fix(deps): update dependency find-root to v1.1.0 (#505)

    There are 23 commits in total.

    See the full diff

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 4
  • Update eslint-plugin-node to the latest version ๐Ÿš€

    Update eslint-plugin-node to the latest version ๐Ÿš€

    The devDependency eslint-plugin-node was updated from 5.2.1 to 8.0.1.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Release Notes for v8.0.1

    ๐Ÿ› Bug fixes

    Commits

    The new version differs by 84 commits.

    • b234dcc 8.0.1
    • 0593c67 ๐ŸŽจ remove garbage
    • 679752b ๐Ÿ› fix no-unpublished-(require|import) false positive (fixes #126)
    • e2fc482 ๐Ÿ› fix no-unpublished-bin false positive (fixes #115)
    • 0225b02 ๐ŸŽจ rename a function
    • 43e3198 โš’ disable codecov comments
    • 62ba642 ๐Ÿ› fix no-deprecated-api error messages (#147)
    • 153ab03 Chore: support the new rule meta.type property (fixes #143) (#145)
    • 932836b 8.0.0
    • c849a27 Chore: update .travis.yml
    • ac4cb6e Fix: lint errors
    • ecf6b11 Chore: update .travis.yml
    • 5936718 Chore: upgrade dependencies
    • 46ed54d New: add two prefer-global rules
    • d153b93 Breaking: update no-unsupported-features/node-builtins rule

    There are 84 commits in total.

    See the full diff

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 3
  • Update semver to the latest version ๐Ÿš€

    Update semver to the latest version ๐Ÿš€

    The dependency semver was updated from 5.6.0 to 5.7.0.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Find out more about this release.

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 3
  •  UnhandledPromiseRejectionWarning: TypeError: versionRouter.route is not a function

    UnhandledPromiseRejectionWarning: TypeError: versionRouter.route is not a function

    Getting exception error, added sample code only

    import * as versionRouter from 'express-version-route'; import { Router, Handler, Request, Response } from 'express'; const routesMap = new Map<string, Handler>(); const route = Router();

    export default (app: Router) => { app.use('/version-customer', route);

    routesMap.set('1.0', (req, res, next) => { return res.status(200).json({ message: 'hello to you version 1.0' }); });

    routesMap.set('default', (req, res, next) => { return res.status(200).json({ message: 'hello to you, this is the default route' }); });

    route.get('/test', versionRouter.route(routesMap)); };

    question 
    opened by arvindgemini 2
  • Update husky to the latest version ๐Ÿš€

    Update husky to the latest version ๐Ÿš€

    The devDependency husky was updated from 2.7.0 to 3.0.0.

    This version is not covered by your current version range.

    If you donโ€™t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.


    Find out more about this release.

    FAQ and help

    There is a collection of frequently asked questions. If those donโ€™t help, you can always ask the humans behind Greenkeeper.


    Your Greenkeeper bot :palm_tree:

    greenkeeper 
    opened by greenkeeper[bot] 2
  • [Snyk] Upgrade semver from 6.3.0 to 7.3.7

    [Snyk] Upgrade semver from 6.3.0 to 7.3.7

    This PR was automatically created by Snyk using the credentials of a real user.


    Snyk has created this PR to upgrade semver from 6.3.0 to 7.3.7.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    Warning: This is a major version upgrade, and may be a breaking change.

    • The recommended version is 17 versions ahead of your current version.
    • The recommended version was released 4 months ago, on 2022-04-12.

    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    ๐Ÿง View latest project report

    ๐Ÿ›  Adjust upgrade PR settings

    ๐Ÿ”• Ignore this dependency or unsubscribe from future upgrade PRs

    opened by lirantal 0
  • [Snyk] Upgrade semver from 6.3.0 to 7.3.5

    [Snyk] Upgrade semver from 6.3.0 to 7.3.5

    Snyk has created this PR to upgrade semver from 6.3.0 to 7.3.5.

    merge advice :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.


    Warning: This is a major version upgrade, and may be a breaking change.

    • The recommended version is 15 versions ahead of your current version.
    • The recommended version was released 10 months ago, on 2021-03-23.

    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.

    For more information:

    ๐Ÿง View latest project report

    ๐Ÿ›  Adjust upgrade PR settings

    ๐Ÿ”• Ignore this dependency or unsubscribe from future upgrade PRs

    opened by snyk-bot 1
Releases(v1.2.4)
Owner
Liran Tal
๐Ÿฅ‘ Developer Advocate @snyksec | @nodejs Security WG | @jsheroes ambassador | Author of Essential Node.js Security | #opensource #web โค
Liran Tal
๐Ÿฆ„ 0-legacy, tiny & fast web framework as a replacement of Express

tinyhttp โšก Tiny web framework as a replacement of Express ?? tinyhttp now has a Deno port (work in progress) tinyhttp is a modern Express-like web fra

v 1 r t l 2.4k Jan 3, 2023
API Services Made Easy With Node.js

Nodal API Services Made Easy with Node.js View the website at nodaljs.com. Nodal is a web server and opinionated framework for building data manipulat

Keith Horwood 4.5k Dec 26, 2022
A serverless web framework for Node.js on AWS (CloudFormation, CloudFront, API Gateway, Lambda)

---- Sorry, this project is not maintained anymore. ---- dawson is a serverless web framework for Node.js on AWS (CloudFormation, CloudFront, API Gate

dawson 717 Dec 30, 2022
Easily add filtering, sorting, and pagination to your Node.js REST API through your old friend: the query string!

QueryQL QueryQL makes it easy to add filtering, sorting, and pagination to your Node.js REST API through your old friend: the query string! Read our i

Truepic 99 Dec 27, 2022
Fast, unopinionated, minimalist web framework for node.

Fast, unopinionated, minimalist web framework for node. const express = require('express') const app = express() app.get('/', function (req, res) {

null 59.5k Jan 5, 2023
A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications on top of TypeScript & JavaScript (ES6, ES7, ES8) ๐Ÿš€

A progressive Node.js framework for building efficient and scalable server-side applications. Description Nest is a framework for building efficient,

nestjs 53.2k Dec 31, 2022
Realtime MVC Framework for Node.js

Website Get Started Docs News Submit Issue Sails.js is a web framework that makes it easy to build custom, enterprise-grade Node.js apps. It is design

Balderdash 22.4k Dec 31, 2022
๐Ÿฅš Born to build better enterprise frameworks and apps with Node.js & Koa

Features Built-in Process Management Plugin System Framework Customization Lots of plugins Quickstart Follow the commands listed below. $ mkdir showca

egg 18.3k Dec 29, 2022
Fast and low overhead web framework, for Node.js

An efficient server implies a lower cost of the infrastructure, a better responsiveness under load and happy users. How can you efficiently handle the

Fastify 26k Jan 2, 2023
๐Ÿ“ฆ๐Ÿ”A lightweight private proxy registry build in Node.js

Version 6 (Development branch) Looking for Verdaccio 5? Check branch 5.x. Verdaccio is a simple, zero-config-required local private npm registry. No n

Verdaccio 14.3k Dec 31, 2022
The future of Node.js REST development

restify is a framework, utilizing connect style middleware for building REST APIs. For full details, see http://restify.com Follow restify on Usage Se

restify 10.6k Jan 2, 2023
๐Ÿš€ The Node.js Framework highly focused on developer ergonomics, stability and confidence

Sponsored by FOSS United is a non-profit foundation that aims at promoting and strengthening the Free and Open Source Software (FOSS) ecosystem in Ind

AdonisJS Framework 13.4k Dec 31, 2022
Use full ES2015+ features to develop Node.js applications, Support TypeScript.

ThinkJS Use full ES2015+ features to develop Node.js applications, Support TypeScript. ็ฎ€ไฝ“ไธญๆ–‡ๆ–‡ๆกฃ Installation npm install -g think-cli Create Application

ThinkJS 5.3k Dec 30, 2022
:rocket: Progressive microservices framework for Node.js

Moleculer Moleculer is a fast, modern and powerful microservices framework for Node.js. It helps you to build efficient, reliable & scalable services.

MoleculerJS 5.5k Jan 4, 2023
MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers

Derby The Derby MVC framework makes it easy to write realtime, collaborative applications that run in both Node.js and browsers. Derby includes a powe

DerbyJS 4.7k Dec 23, 2022
Node.js framework

Node.js framework Total.js framework is a framework for Node.js platfrom written in pure JavaScript similar to PHP's Laravel or Python's Django or ASP

Total.js 4.2k Jan 2, 2023
A microservices toolkit for Node.js.

A Node.js toolkit for Microservice architectures This open source module is sponsored and supported by Voxgig. seneca Lead Maintainer: Richard Rodger

Seneca Microservices Framework 3.9k Dec 19, 2022
๐Ÿ” A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. ๐ŸŒˆ

Midway - ไธ€ไธช้ขๅ‘ๆœชๆฅ็š„ไบ‘็ซฏไธ€ไฝ“ Node.js ๆก†ๆžถ English | ็ฎ€ไฝ“ไธญๆ–‡ ?? ๆฌข่ฟŽ่ง‚็œ‹ Midway Serverless 2.0 ๅ‘ๅธƒไผšๅ›žๆ”พ๏ผš https://www.bilibili.com/video/BV17A411T7Md ใ€ŠMidway Serverless ๅ‘ๅธƒ

Midway.js 6.3k Jan 8, 2023
:evergreen_tree: Modern Web Application Framework for Node.js.

Trails is a modern, community-driven web application framework for Node.js. It builds on the pedigree of Rails and Grails to accelerate development by

Trails 1.7k Dec 19, 2022