功能说明
- koa是一个新的 web 框架,由 Express 幕后的原班人马打造,单比express更加小巧,额外的功能比如koa-router都通过中间件来实现。
实现目标
- 实现一个web服务器可以供用户调用。
- 实现中间件系统即koa中的use,可以供koa安装中间件。
实例展示
const koa = require('koa');
const app = new koa();
app.use(async (ctx, next) => {
console.log('中间件1 start')
await next()
console.log('中间件1 end')
})
app.use(async (ctx, next) => {
console.log('中间件2 start')
await next()
console.log('中间件2 end')
})
实现web服务器
- 首先我们通过nodejs的http模块实现一个建议服务器服务器。
const http = require('http');
class Koa{
constructor(options) {}
// 实现监听端口号
listen(...arg) {
const server = http.createServer(this.callback);
return server.listen(...arg)
}
callback(req,res) {
console.log(req,res)
res.end('ok')
}
}
- 简易服务器实现好了,我们想啊,万一这个服务中报错了,或者想发出一些消息通知外面怎么办?那么 好了我们想到了nodejs中的event模块。
const http = require('http');
const Emitter = require('events');
class Koa extends Emitter{
constructor(options) {
super()
}
// 实现监听端口号
listen(...arg) {
const server = http.createServer(this.callback);
return server.listen(...arg)
}
callback(req,res) {
console.log(req,res)
res.end('ok')
this.emit('测试消息')
}
}
const app = new Koa()
app.on('xxx', () => {console.log('接收消息')})
那么现在简易的服务器就实现好了,计划总共三章,下一章我们说下koa中use的实现,这个实现比较有趣一点,和vue的异步队列同步执行有些相似。最后一章说下中间件use参数中的ctx,其实也就是做了属性代理,拿到req,res上的一些属性,做到可以直接访问。