上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框架,那么该功能应该被集成到框架中了。