Skip to main content

koa 知识点

什么是 Koa ?

Koa是基于Node.js的web框架,现在大家使用的版本是koa2。其特点是对异步处理变简单,使用async和Promise,避免回调地狱。

什么是 Context 对象?

Koa将Node.js的Request和Response对象封装到Context对象中,所以Context对象成为一次对话的上下文,通过加工就可以控制返回给用户的内容。

使用过的 Koa 中间件

Koa-body 原理

koa-body 就是结合了 koa-bodyparse 和 koa-multer

可以把 POST 的参数解析到 ctx.request.body 中

支持文件上传并限制大小

与Express的对比

Express的中间件更多,但是Express采用ES5的语法所以容易造成回调地狱,Koa2使用ES67 Promise/Async,可读性更好更简单。并且Koa2几乎所有的功能都需要由第三方中间件完成

Koa中间件概念

中间件函数就是带有ctx和next的函数,ctx就是封装了response和request,next用于将执行权交给下游的中间件.在next()之前使用awiat关键字因为next()会返回promise对象,在中间件中位于next()之后的会暂停执行,直到最后一个中间件执行完毕,再自下而上执行next()之后的函数,先进后出。

使用Koa写出简易路由

不使用koa-router

const koa = require('koa');
const app = new koa();
app.use(async (ctx, next) => {
const {url, method} = ctx;
if(url === '/404' && method === 'GET'){
ctx.body = 'Not Found'
ctx.status = 404;
} else {
ctx.body = 'Default Content'
}
await next();
})
app.listen(3000)

使用koa-router

const koa = require('koa');
const app = new koa();
const bodyparser = require('koa-bodyparser')
const Router = require('koa-router')
const router = new Router() // 初始化router
app.use(bodyparser({
enableTypes:['json', 'form', 'text']
}))

app.use(require('koa-static')(__dirname + '/public'))
app.use(router.routes()) // 加载router中间件
app.use(router.allowedMethods()) //对异常码处理


router.get('/', async (ctx, next) => {
ctx.render('index')
})

router.post('/test1', async (ctx, next)=>{
let retunData = ctx.request.body
console.log(ctx.request.body)
ctx.body = retunData
})

参考