koa是在express基础上封装起来的,使用起来比express要简单很多
用express跑一个我们的服务器
const http = require('http');
const serve = http.createServer((req, res) => {
res.writeHead(200)
res.end("hello world")
})
serve.listen(8080);
用koa呢?首先要安装一下koa,`cnpm i koa --save`
const Koa = require('koa');
const app = new Koa();
const {
createReadStream
} = require('fs')
//模块化的写法
app.use(async (ctx, next) => {
if (ctx.path == '/favicon.ico') {
ctx.body = createReadStream('./favicon.ico')
} else {
await next();
}
})
app.use(ctx => ctx.body = 'hi koa2')
app.listen(3030)
很显然koa比expre的实现更精简!下面自己来实现下koa!!
框架名的话,随便取,这里就取名为kob,为了与koa区别开来。
第一步:新建demo1.js,假设我们的kob已经实现了,可以这样操作
const kob = require('./kob');
const app = new kob();
app.use(() => { //需要完善
console.log('test')
});
app.listen(4040)
第二部:实现kob.js
//koa实现的主文件
const http = require('http');
//封装一个类
class Kob {
//类的listen方法
listen(...args) {
http.createServer((req, res) => {
res.writeHead(200);
res.end("hello,myKoa")
}).listen(...args)
}
//类的use方法
use(callback) {
this.callback = callback;
}
}
//导出这个类
module.exports = Kob;
跑一下demo1.js,正常的话,结果就是下面那样,OK!
接下来,进行进一步的改造,更加趋向koa框架
新建三个文件,分别是context.js上下文文件,request.js请求文件,response.js响应文件
//context.js
module.export = {
get url() {
return this.request.url;
},
get body() {
return this.response._body;
},
set body(val) {
this.response.body = val;
}
}
//request.js
module.export = {
get url() {
return this.request.url;
}
}
//response.js
module.exports = {
get body() {
this._body;
},
set body(val) {
this._body = val;
}
}
然后再kob.js进行整合
未完待续