1.koa是什么:
由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。
2.安装
和express那样,先创建一个项目,然后安装koa:
npm init --yes
npm install koa --save
koa的最新版本为2.5.x。
3.使用
在文件夹下建立server.js文件,然后写入:
const Koa = require('koa')
const app = new Koa()
app.use(async(ctx) => {
ctx.body = 'hello koa'
})
app.listen(3000)
console.log('hello koa')
其中ctx为context,即上下文,封装了request和response。
这里推荐一个工具:nodemon,这个工具和node-supervisor基本上是一致的,但是其功能比较强大。关键是supervisor这个单词太长啦。
然后运行nodemon server.js
可是这只能自动刷新命令窗口,而没有自动打开浏览器窗口并自动刷新。我看了一下npm也不知道如何自动打开,也可能是我没找到。
运行后看到浏览器显示:
3.next()
我们多添加两个中间件:
// 中间件1
app.use(async(ctx) => {
ctx.body = '1'
})
// 中间件2
app.use(async(ctx) => {
ctx.body += '2'
})
// 中间件3
app.use(async(ctx) => {
ctx.body += '3'
})
在浏览器可以看到,执行完第一个中间件就停止,浏览器还是只显示'1'。
为了能执行到下面,回调函数中传入第二个参数next,并用next方法执行下一个中间件。
app.use(async(ctx, next) => {
ctx.body = '1'
next()
})
app.use(async(ctx, next) => {
ctx.body += '2'
next()
})
app.use(async(ctx, next) => {
ctx.body += '3'
})
4.洋葱圈型的中间件机制
该图的意思是:当一个请求过来的时候,会依次经过各个中间件进行处理。中间件跳转的信号是next(),当到最后一个中间件时,该中间件运行完后,就会逆序执行前面那些中间件剩下的逻辑。
app.use(async(ctx, next) => {
ctx.body = '1'
next()
ctx.body += '[1]'
})
app.use(async(ctx, next) => {
ctx.body += '2'
next()
ctx.body += '[2]'
})
app.use(async(ctx, next) => {
ctx.body += '3'
next()
ctx.body += '[3]'
})
浏览器显示:
也就是会返回来执行ctx.body += '[2]'
、ctx.body += '[1]'
。