运行 npm i koa2
命令安装。新建一个 app.js
写入我们的第一份 Koa 代码。
const koa = require('koa2')
const app = new koa()
app.use(async (ctx, next) => {
ctx.response.status = 200
ctx.response.body = 'hi, koa'
await next()
})
app.listen(3000)
node app.js
,成功之后运行在 3000端口
。
中间件是 Koa 一个重要的概念,它是一个执行的链条,整个链条组成了一个运行的周期,这样说有点抽象,我们看代码理解。
const koa = require('koa2')
const app = new koa()
// 访问权限
app.use(async (ctx, next) => {
console.log('权限验证通过...')
await next() // 执行下一个中间件
})
// 日志记录
app.use(async (ctx, next) => {
console.log('日志记录完成...')
await next() // 执行下一个中间件
})
// 响应处理
app.use(async (ctx, next) => {
ctx.response.status = 200
ctx.response.body = 'hi, koa'
await next()
})
app.listen(3000)
每一个中间件负责特定的小模块,互相配合,组合成一条完整的业务通道。中间件的功能也为 Koa 项目的扩展提供了很大的便利性,因为一些特定成熟的功能可以抽象成一个个模块共享出来,比如 路由模块
、模版引擎
... 让我们可以站在巨人的肩膀,直接在项目中导入使用这些成熟的模块。
async await 语法可以参考 - JavaScript 异步。
中间件函数中另外一个参数 ctx
,是一个环境上下文参数,解决了中间件之间的依赖问题,是中间件之间的全局变量。
app.use(async (ctx, next) => {
ctx.a = 1
await next()
})
app.use(async (ctx, next) => {
console.log(ctx.a) // 1
await next()
})
两一个作用,ctx
包含了 HTTP
的请求和响应处理。