koa2出来已经很长一段时间了,之前一直没有遇上可以练手的项目,这次刚好有了机会,正好折腾一下。
安装
koa2需要7.6.0及以上的node版本,目的是为了支持async await语法,不需要babel支持(7.6.0以下如果使用async await语法需要babel配置)。
官方推荐使用nvm去做node的版本管理。(因之前遇到的一些坑,而且对于版本管理的需求不是很大,笔者都是直接覆盖安装最新版本。)
yarn add koa
(当然也可以使用npm)
简单使用
const Koa = require('koa');
const app = new Koa();
app.use(ctx => {
ctx.body = 'Hello World';
});
// 监听端口3000
app.listen(3000);
console.log('打开127.0.0.1:3000查看');
中间件模式
const Koa = require('koa');
const app = new Koa();
// x-response-time
app.use(async function (ctx, next) {
const start = new Date();
await next();
const ms = new Date() - start;
ctx.set('X-Response-Time', `${ms}ms`);
});
// logger
app.use(async function (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);
通过async await 来实现中间件的同步模式,由最上面的async开始 一只进入下一个await
路由模块
使用koa-router来实现路由
yarn add koa-router
独立的index.js路由文件
const Router = require('koa-router');
const users = require('./users');
const myRouter = new Router();
myRouter.use('/users', users.routes(), users.allowedMethods());
myRouter.get('/', async (ctx) => {
ctx.body = 'Hello Worlddjlhud h!';
});
module.exports = myRouter;
app.js
const myRouter = require('./routers/index');
app
.use(myRouter.routes())
.use(myRouter.allowedMethods());
一个简单的koa2服务器就搭建好了