Koa开发:入门、进阶与实战
上QQ阅读APP看书,第一时间看更新

2.5 处理请求数据

在实际项目中,HTTP请求的场景是最普遍的。请求也包括很多类型,如get、post等。后端收到这些请求后,需要解析参数,Koa本身可以解析get请求参数,不能解析post请求参数。本节介绍Koa如何应对各类请求场景。

先看一下Koa对get请求的处理逻辑,代码如下。

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const router = new Router()

router.get('/api/get/userInfo', async (ctx) => {
  const { name } = ctx.request.query
  ctx.body = `请求参数为${name}`
})

// 加载路由中间件
app.use(router.routes())

app.listen(4000, () => {
  console.log('server is running, port is 4000')
})

我们用postman做一下get请求测试,在链接http://127.0.0.1:4000/api/get/userInfo?name=liujianghong中query的参数为name=liujianghong,则上述代码的返回结果就是“请求参数为liujiang-hong”。

主要看一下post请求的参数处理,请求参数是{“name”: “liujianghong”},由于Koa自身没有解析post请求参数的功能,因此需要安装一个Koa中间件koa-bodyparser。我们主要看一下逻辑实现,代码如下。

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const bodyParser = require('koa-bodyparser')
const router = new Router()

app.use(bodyParser())
router.post('/api/get/userInfo', async (ctx) => {
  let { name } = ctx.request.body
  ctx.body = `请求参数为 ${name}`
})

// 加载路由中间件
app.use(router.routes())

app.listen(4000, () => {
  console.log('server is running, port is 4000')
})

使用koa-bodyparser中间件后,post请求的参数会被自动解析成JSON格式,这在实际项目中是非常实用的,如果用的是开源的BFF框架,那么该功能应该被集成到框架中了。