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
})