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" / >
2014-12-04 09:03:46 +00:00
2014-11-30 08:03:09 +00:00
[![gitter][gitter-image]][gitter-url]
2014-07-26 06:43:41 +00:00
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
2014-07-06 01:32:25 +00:00
[![Test coverage][coveralls-image]][coveralls-url]
2013-11-08 09:16:26 +00:00
2015-08-31 05:07:54 +00:00
Expressive HTTP middleware for node.js to make web applications and APIs more enjoyable to write. Koa's middleware stack flows 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
2015-11-05 16:42:14 +00:00
Only methods that are common to nearly all HTTP servers are integrated directly into Koa's small ~570 SLOC codebase. This
2015-08-23 15:18:54 +00:00
includes things like content negotiation, normalization of node inconsistencies, redirection, and a few others.
2013-08-17 07:15:57 +00:00
2015-08-31 05:07:54 +00:00
Koa is not bundled with any middleware.
2013-08-17 07:15:57 +00:00
## Installation
```
$ npm install koa
```
2015-10-11 22:39:48 +00:00
Koa requires __node v4.0.0__ or higher for (partial) ES2015 support.
2013-08-17 07:15:57 +00:00
## Community
2013-11-13 17:01:15 +00:00
- [API ](docs/api/index.md ) documentation
2014-09-08 00:42:30 +00:00
- [Badgeboard ](https://koajs.github.io/badgeboard ) and list of official modules
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 )
2014-03-09 19:23:40 +00:00
- [Reddit Community ](http://reddit.com/r/koajs )
2013-08-17 07:15:57 +00:00
- [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 )
2015-04-05 12:24:06 +00:00
- [中文文档 ](https://github.com/turingou/koa-guide )
2015-10-05 23:22:56 +00:00
- __[#koajs]__ on freenode
2013-08-17 07:15:57 +00:00
2014-08-04 15:34:07 +00:00
## Getting started
2014-07-26 06:43:41 +00:00
2014-12-04 09:03:46 +00:00
- [Kick-Off-Koa ](https://github.com/koajs/kick-off-koa ) - An intro to koa via a set of self-guided workshops.
- [Workshop ](https://github.com/koajs/workshop ) - A workshop to learn the basics of koa, Express' spiritual successor.
- [Introduction Screencast ](http://knowthen.com/episode-3-koajs-quickstart-guide/ ) - An introduction to installing and getting started with Koa
2014-07-26 06:43:41 +00:00
2013-08-17 07:15:57 +00:00
## Example
2015-10-23 08:36:13 +00:00
```js
const Koa = require('koa');
const app = new Koa();
// logger
app.use((ctx, next) => {
const start = new Date;
return next().then(() => {
const ms = new Date - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});
});
// response
app.use(ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
```
2015-10-28 02:08:59 +00:00
## Example with ___async___ functions (Babel required)
2015-10-23 08:36:13 +00:00
```js
const Koa = require('koa');
const app = new Koa();
// logger
app.use(async (ctx, next) => {
const start = new Date;
await next();
const ms = new Date - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});
// response
app.use(ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
```
## Example with generator
To use generator functions, you must use a wrapper such as [co ](https://github.com/tj/co ) that is no longer supplied with Koa.
```js
const Koa = require('koa');
const app = new Koa();
const co = require('co');
// logger
app.use(co.wrap(function *(ctx, next){
const start = new Date;
yield next();
const ms = new Date - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
}));
// response
app.use(ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
```
2015-10-29 17:25:46 +00:00
## Example with old signature
If you want to use old signature or be compatible with old middleware, you must use [koa-convert ](https://github.com/gyson/koa-convert ) to convert legacy generator middleware to promise middleware.
2013-08-17 07:15:57 +00:00
```js
2015-10-13 06:19:42 +00:00
const Koa = require('koa');
const app = new Koa();
2015-10-29 17:25:46 +00:00
const convert = require('koa-convert')
2013-08-17 07:15:57 +00:00
// logger
2015-10-29 17:25:46 +00:00
app.use(convert(function *(next){
2015-10-05 18:23:47 +00:00
const start = new Date;
2013-11-08 00:31:16 +00:00
yield next;
2015-10-05 18:23:47 +00:00
const ms = new Date - start;
2015-10-11 22:43:45 +00:00
console.log(`${this.method} ${this.url} - ${ms}`);
2015-10-29 17:25:46 +00:00
}));
2013-08-17 07:15:57 +00:00
// response
2015-10-29 17:25:46 +00:00
app.use(ctx => {
ctx.body = 'Hello World';
2013-08-17 07:15:57 +00:00
});
app.listen(3000);
```
## Running tests
```
$ make test
```
2013-08-26 02:16:57 +00:00
## Authors
2015-10-12 07:04:58 +00:00
See [AUTHORS ](AUTHORS ).
2013-08-26 02:16:57 +00:00
2013-08-17 07:15:57 +00:00
# License
MIT
2014-07-06 01:32:25 +00:00
2014-10-09 17:59:57 +00:00
[npm-image]: https://img.shields.io/npm/v/koa.svg?style=flat-square
2014-07-06 01:32:25 +00:00
[npm-url]: https://npmjs.org/package/koa
2014-10-27 16:42:01 +00:00
[travis-image]: https://img.shields.io/travis/koajs/koa/master.svg?style=flat-square
2014-07-06 01:32:25 +00:00
[travis-url]: https://travis-ci.org/koajs/koa
2014-10-27 16:42:01 +00:00
[coveralls-image]: https://img.shields.io/coveralls/koajs/koa/master.svg?style=flat-square
2014-07-06 01:32:25 +00:00
[coveralls-url]: https://coveralls.io/r/koajs/koa?branch=master
2014-11-04 16:59:11 +00:00
[gitter-image]: https://badges.gitter.im/Join%20Chat.svg
[gitter-url]: https://gitter.im/koajs/koa?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge
2015-10-05 23:22:56 +00:00
[#koajs]: https://webchat.freenode.net/?channels=#koajs