koach
v0.0.3
Published
Functional middleware composition + React-like component classes => modular composable Node web framework
Downloads
4
Maintainers
Readme
Koach
A piecewise API framework for Node.js
Declarative React-like component model meets Koa middleware function composition 😱
Contributing
This project is still young and actively developed. If you want to show some ❤️, feel free to submit GitHub issues and pull requests!
Motivation and Design
Koach provides a powerful component model and a declarative way to express those components and their composition. It is an attempt to formalize many of the conventions and patterns common in Node middlewares. The foundational building blocks are Koa-style middleware functions.
A good component model enables composition. With Koach, a monolithic API can instead be expressed as a hierarchical composition of components and subcomponents. A carefully composed API makes it easy to break off independent pieces into their own dedicated microservices (I.e. separate repo, deployment, etc.) when the time is right.
Installation
$ yarn add koach
or$ npm i koach
Usage
The simplest way to get started with Koach
import Koach, { Component, Router } from 'koach'
class App extends Component {
compose() {
return Router.spec()
.get('/', ctx => ctx.body = 'Hello World!')
}
}
// register our shiny new App component
Koach.registerComponent('App', () => App)
// listen on port 3000
Koach.listen(3000)
Getting Started
Koach in a nutshell:
- Define components by overriding
compose()
, returning either:- a Koa-style middleware function
- a component specification
- Create a component specification with
spec = Component.spec(config:Object) => Specification
- Specify subcomponents with chainable
use()
statementsspec.use(...subcomponents:Specification|Function) => Specification
- Specify subcomponents with chainable
- Configuration properties are available to your component as
this.config
this.config
can be treated as an Object or a function- Ex.
this.config.auth.secret
orthis.config('auth.secret')
- Ex.
- Subcomponents are available to your
compose()
implementation asthis.config.subcomponents
compose() { return Router.spec() .use(this.config.subcomponents) .get('/status', ctx => ctx.body = 'Healthy') }
Documentation
Visit the Wiki for detailed documentation and steps to get started with Koach.
License
MIT