Koa2使用简介

1.安装

npm install koa

2.简单使用

const Koa = require('koa')
const app = new Koa()
app.use(ctx => {
    ctx.body = 'ttx'
})
app.listen(3000)

网络请求访问时,就会响应”ttx”。当然koa2也支持异步函数输入:

app.use(async ctx => {
    await delay(3000)
    ctx.body = 'ttx'
}))

3.中间件使用链

app.use(async (ctx, next) => {
    await next()
    console.log('ttx')
})
app.use(async (ctx, next) => {
    console.log('jss')
})
app.use(async (ctx, next) => {
    console.log('nali')
})

请求触发时依次输出jssttx,形成中间件处理链,截止在没有使用next将中间件调用权转出的中间件。

4.路由模块

express内置了router路由模块,但koa需要自行添加;koaapp.use()不能直接像express一样进行路由区分。

// app.js
const Koa = require('koa')
const bodyParser = require('koa-bodyparser') // 处理post请求,上下文的表单数据解析到ctx.request.body中
const router = require('koa-router')()
const page1Router = require('./routes/page1.js)
const app = new Koa()
app.use(bodyParser())
router.use('/page1', page1Router) // 注意起始的/是必须的
app.use(router.routes()) // 路由挂载
app.listen(3000)

// page1.js
const router = require('koa-router')()
const page2Router = require('./page2.js')    
router.get('/', async (ctx, next) => {
    ctx.body = 'page1'
})    
router.use('/page2', page2Router)    
module.exports = router.routes()

// page2.js
const router = require('koa-router')()
router.get('/', async (ctx, next) => {
    ctx.body = 'page2'
})    
module.exports = router.routes()

上述是模块化的样式及路由嵌套的使用。

5.模板引擎模块

// app.js
// ...
const views = require('koa-views') // view中间件
const path = require('path') // 路径处理中间件
const router = require('koa-router')()
const app = new Koa()
app.use(views(path.join(__dirname, './views'), {
    extension: 'ejs'
}))
router.get('/page1', async (ctx, next) => {
    await ctx.render('page1', {name: 'ttx'}) // 注意await是需要的
})
// ...

6.快速构建项目

npm install koa-generator -g
koa2 myProject

7.小计

总的来说,koaexpress大同小异,koa精简了许多内置中间件,可以使用async/await进行异步书写,更方便;但koa中间件少,很多需要的配置都要自己去写一遍,项目构建时相对麻烦。

THE END!