LogoLogo
  • 导航指南
  • javaScript
    • Javascript中的继承
    • 业务中条件渲染的另一种玩法 · Issue #25 · stack-wuh/Blog
    • 从PM2到docker, 离不开的Nginx · Issue #26 · stack-wuh/Blog
    • 闭包在组合查询中的使用 · Issue #24 · stack-wuh/Blog
  • webpack
    • 优化网页的加载速度 · Issue #15 · stack-wuh/Blog
  • NODEJS
    • 为什么选择了Koajs
    • 创建一个简单的Koa服务
    • Koa应用的中间件
    • 我用了30天完成了我的个人网站--Express · Issue #17 · stack-wuh/Blog
  • React
    • 从业务中去学习React · Issue #22 · stack-wuh/Blog
    • Umi--多打包环境配置 · Issue #5 · stack-wuh/Blog
  • OTHER
    • 配置阿里云的OSS+CDN加速
由 GitBook 提供支持
在本页
  • 1. koa-router
  • 2. koa-body
  • 3. koa-logger

这有帮助吗?

  1. NODEJS

Koa应用的中间件

将一个普通的koa应用需要用的中间件全部收集在这里。

上一页创建一个简单的Koa服务下一页我用了30天完成了我的个人网站--Express · Issue #17 · stack-wuh/Blog

最后更新于3年前

这有帮助吗?

1.

必不可缺一个中间件,路由中间件不仅仅是koa-router一个库,还有很多router库,如果你喜欢可以自己来一个。但是这个是官方的,我们还是直接用比较好:

app.ts
import Koa from 'koa'
import Router from 'koa-router'

const app = new Koa()
const router = new Router()

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

app.use(router.routes()).use(router.allowedMethods())

2.

在Express应用中,我们处理Post请求的参数时,用的是bodyparser中间件。同理,在koa中使用的就是koa-body。现在支持以下几种:

  • multipart/form-data

  • application/x-www-urlencoded

  • application/json

  • application/json-patch+json

  • application/vnd.api+json

  • application/csp-report

  • text/xml

$ curl -d 'username=asd&password=123123' http://localhost:5544/user

$ curl http://localhost:5544/user\?name\=asd\&age\=10

在koa对应的路由里,直接将POST请求的参数以JSON格式返回, 然后观察GET与POST请求的不同与相同之处:

const router.get('/user', async ctx => {
    ctx.body = {
        query: ctx.request.query,
        body: ctx.request.body
    }
})
const router.post('/user', async ctx => {
    ctx.body = {
        body: ctx.request.body,
        query: ctx.request.query
    }
})

在GET请求中,即使使用了bodyParser中间件,ctx.request.body也是一个空对象。只有在POST等复杂请求中,ctx.request.body才是请求头中的入参。

所不同的是,在POST请求中,ctx.request.query 却并不是一个空对象。

这个中间件没有什么可说的啦,就是一个日志中间件,可以在中间件中打印请求参数。

3.

koa-router
koa-body
koa-logger