2013-12-22 06:41:06 +00:00
< img src = "https://dl.dropboxusercontent.com/u/6396913/koa/logo.png" alt = "koa middleware framework for nodejs" width = "255px" / >
2013-08-17 07:15:57 +00:00
2013-11-08 09:16:26 +00:00
[![Build Status ](https://travis-ci.org/koajs/koa.png )](https://travis-ci.org/koajs/koa)
2013-08-17 07:15:57 +00:00
Expressive middleware for node.js using generators via [co ](https://github.com/visionmedia/co )
2013-12-21 05:45:27 +00:00
to make web applications and APIs more enjoyable to write. Koa's middleware flow in a stack-like manner allowing you to perform actions downstream, then filter and manipulate the response upstream. Koa's use of generators also greatly increases the readability and robustness of your application.
2013-08-17 07:15:57 +00:00
2013-08-17 07:33:28 +00:00
Only methods that are common to nearly all HTTP servers are integrated directly into Koa's small ~400 SLOC codebase. This
includes things like content-negotiation, normalization of node inconsistencies, redirection, and a few others.
2013-08-17 07:15:57 +00:00
2013-08-17 07:33:28 +00:00
No middleware are bundled with koa. If you prefer to only define a single dependency for common middleware, much like Connect, you may use
2013-08-17 07:15:57 +00:00
[koa-common ](https://github.com/koajs/common ).
## Installation
```
$ npm install koa
```
2013-12-19 06:58:44 +00:00
To use Koa you must be running __node 0.11.9__ or higher for generator support, and must run node(1)
2013-12-19 06:58:23 +00:00
with the `--harmony` flag. If you don't like typing this, add an alias to your shell profile:
2013-08-17 07:15:57 +00:00
```
2013-12-19 06:58:23 +00:00
alias node='node --harmony'
2013-08-17 07:15:57 +00:00
```
2013-12-19 21:44:26 +00:00
Another option, if you would like to use koa with __node 0.10.x__ (the current
stable branch), or are tired of typing the `--harmony` flag, is to use
2013-12-22 15:38:30 +00:00
[`gnode` ](https://github.com/TooTallNate/gnode ) to spawn your node instance. However note that performance degrades quickly compared to 0.11.x.
2013-12-19 21:44:26 +00:00
2013-08-17 07:15:57 +00:00
## Community
2013-11-13 17:01:15 +00:00
- [API ](docs/api/index.md ) documentation
2013-12-07 23:09:09 +00:00
- [Examples ](https://github.com/koajs/examples )
2013-11-12 09:43:27 +00:00
- [Middleware ](https://github.com/koajs/koa/wiki ) list
2013-09-17 13:48:36 +00:00
- [Wiki ](https://github.com/koajs/koa/wiki )
2013-08-17 07:15:57 +00:00
- [G+ Community ](https://plus.google.com/communities/101845768320796750641 )
- [Mailing list ](https://groups.google.com/forum/#!forum/koajs )
2013-09-03 01:25:17 +00:00
- [Guide ](docs/guide.md )
2013-08-21 05:07:00 +00:00
- [FAQ ](docs/faq.md )
2013-08-21 05:07:20 +00:00
- __#koajs__ on freenode
2013-08-17 07:15:57 +00:00
## Example
```js
var koa = require('koa');
var app = koa();
// logger
2013-11-08 00:31:16 +00:00
app.use(function *(next){
var start = new Date;
yield next;
var ms = new Date - start;
console.log('%s %s - %s', this.method, this.url, ms);
2013-08-17 07:15:57 +00:00
});
// response
2013-11-08 00:31:16 +00:00
app.use(function *(){
this.body = 'Hello World';
2013-08-17 07:15:57 +00:00
});
app.listen(3000);
```
## Running tests
```
$ make test
```
2013-08-18 02:04:05 +00:00
## Benchmarks
2013-11-12 20:17:37 +00:00
If you like silly benchmarks, here's the requests per second using
[wrk ](https://github.com/wg/wrk ) 3.x on my MBP.
2013-08-18 02:07:07 +00:00
```
1 middleware
2013-11-12 20:17:37 +00:00
8367.03
2013-08-18 02:07:07 +00:00
5 middleware
2013-11-12 20:17:37 +00:00
8074.10
2013-08-18 02:07:07 +00:00
10 middleware
2013-11-12 20:17:37 +00:00
7526.55
2013-08-18 02:07:07 +00:00
15 middleware
2013-11-12 20:17:37 +00:00
7399.92
2013-08-18 02:07:07 +00:00
20 middleware
2013-11-12 20:17:37 +00:00
7055.33
2013-08-18 02:07:07 +00:00
30 middleware
2013-11-12 20:17:37 +00:00
6460.17
2013-08-18 02:07:07 +00:00
50 middleware
2013-11-12 20:17:37 +00:00
5671.98
100 middleware
4349.37
2013-08-18 02:07:07 +00:00
```
2013-12-02 13:09:58 +00:00
With __50__ middleware (likely much more than you'll need), that's __340,260__ requests per minute, and __20,415,600__ per hour, and over __440 million__ per day, so unless you're a Facebook and can't manage to spin up more
2013-08-18 02:07:07 +00:00
than one process to scale horizontally you'll be fine ;)
2013-08-26 02:16:57 +00:00
## Authors
- [TJ Holowaychuk ](https://github.com/visionmedia )
- [Jonathan Ong ](https://github.com/jonathanong )
2013-11-08 00:31:16 +00:00
- [Julian Gruber ](https://github.com/juliangruber )
2013-08-26 02:16:57 +00:00
2013-08-17 07:15:57 +00:00
# License
MIT