基础使用
const Koa = require('koa'); const app = new Koa(); app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); //response app.use(ctx => { ctx.status = 200; ctx.set('Content-type', 'text/plain; charset=utf-8'); ctx.body = 'Hello Koa'; }); app.listen(3000); // 一些其他的方法 ctx.redirect('/home'); // 相当于 // res.status = 302; // res.setHeader('Location', '/Home')
三个 API
- use
app.use((ctx, next) => {})
- listen
app.listen(3000);
- callback
该函数内部实现三个功能
- 使用 koa-compose 函数将 middleware 中间件数组转化为中间件 fn;
- 调用 app.createContext 函数。创建 context, request, response 对象,将 request 和 response 挂载在 context 上;把 req 和 res 挂载到三个对象上。
例如: request 的原型对象上部分代码如下
get header(){ return this.req.headers; } set header(val){ this.req.headers = val; }
我们现在就可以根据 ctx.request.header 获取 req 的 headers 了。
3. 执行 handleRequest 函数,本质是把组装好的 context 传入中间件 fn 执行。
Koa-router
const Router = require('koa-router'); const router = new Router(); router.get('/', (ctx, next) => { ctx.body = 'Hello World!'; }) .post('/users', (ctx, next) => { // ... }) .put('/users/:id', (ctx, next) => {}) .del('/users/:id', (ctx, next) => {}) .all('/users/:id', (ctx, next) => {}); app.use(router.routes()); app.use(router.allowedMethods());
koa-static
用于处理静态资源的 koa 中间件
const static = require('koa-static'); app.use(static(''public));
koa-body
处理请求的中间件,可以轻松获得请求的内容
const body = require('koa-body'); app.use(body({multipart: true})); app.use((ctx) => { console.log(ctx.request.body); })