koa知识点整理

2019-04-05  本文已影响0人  龚达耶

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

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

Koa就是包含一组中间件的函数对象

https://www.jianshu.com/p/0790efc02c22

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

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

支持文件上传并限制大小

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

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

不使用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
})
上一篇下一篇

猜你喜欢

热点阅读