Koa2使用

koa中文官网
不错的gitbook

1.koa是什么:

由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。


image.png
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也不知道如何自动打开,也可能是我没找到。
运行后看到浏览器显示:


image.png
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]'
})

浏览器显示:


image.png

也就是会返回来执行ctx.body += '[2]'ctx.body += '[1]'

你可能感兴趣的:(Koa2使用)