node中间件koa-bodyparser
2019-12-16 本文已影响0人
紫气楠楠
koa-bodyparser中间件
这个中间件可以将post请求的参数转为json格式返回
koa接收到的post请求参数并不是json格式,我们需要将其转换为json
使用方法:安装后直接在ctx.request.body内获取POST请求参数,中间件自动给我们解析为json
安装:
npm install --save koa-bodyparser
const Koa = require('koa');
const app = new Koa();
// 引入koa-bodyparser中间件,这个中间件可以将post请求的参数转为json格式返回
const bodyParser = require('koa-bodyparser');
// 使用中间件后,可以用ctx.request.body进行获取POST请求参数,中间件自动给我们解析为json
app.use(bodyParser());
// request.method可以获取请求方法。get,post或者其他类型(request对象被封在ctx内,所以也可以ctx.method获取)
app.use(async(ctx)=>{
if (ctx.url === '/' &&ctx.method === 'POST'){
let postdata = ctx.request.body
ctx.body = postdata
}else {
// 其他请求显示404
ctx.body = '<h1>404!</h1>'
}
})
app.listen(3000,()=>{
console.log('server starting at localhost:3000')
})
如果不用中间件来写,就需要我们自己拼接:
const Koa = require('koa');
const app = new Koa();
// request.method可以获取请求方法。get,post或者其他类型(request对象被封在ctx内,所以也可以ctx.method获取)
app.use(async(ctx)=>{
if (ctx.url === '/' &&ctx.method === 'POST'){
let postdata = await parsePostData(ctx)
ctx.body = postdata
}else {
// 其他请求显示404
ctx.body = '<h1>404!</h1>'
}
})
// 将post请求参数拼接成一个字符串
function parsePostData(ctx){
return new Promise((resolve,reject)=>{
try{
let postdata = ''
// 请求流传送时触发
ctx.req.on('data',(data)=>{
postdata+=data
})
// 请求结束时触发
ctx.req.addListener('end',()=>{
let postData = parseQueryStr(postdata)
return resolve(postData)
})
}catch(error){
reject(error)
}
})
}
// 字符串封装成JSON对象
function parseQueryStr(queryStr){
let queryData = {}
let queryList = queryStr.split('&')
console.log(queryList)
for ( let [index,item] of queryList.entries()){
let itemlist = item.split('=')
console.log(itemlist)
// 向queryData对象内添加键值对
// decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
queryData[itemlist[0]] = decodeURIComponent(itemlist[1])
}
return queryData
}
app.listen(3000,()=>{
console.log('server starting at localhost:3000')
})