GET请求数据获取
在Koa中,获取GET请求数据源头是koa中的request对象中的query方法或querystring方法,由于ctx对request的API有直接引用,所以可以直接通过ctx.query,ctx.querystring获得:其中,ctx.query是格式化好的参数对象,ctx.querystring是请求字符串
例子代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26const Koa = require('koa2')
const app = new Koa()
app.use(async ctx=>{
let url = ctx.url
//从上下文的request对象中获取
let request = ctx.request
let req_query = request.req_query
let req_querystring = request.req_querystring
//从上下文提取
let ctx_query = ctx.query
let ctx_querystring = ctx.querystring
ctx.body = {
url,
req_query,
req_querystring,
ctx_query,
ctx_querystring
}
})
app.listen(3000,()=>{
console.log('get is running ')
})
POST请求数据获取
对于POST请求的处理,koa2没有封装获取参数的方法,需要通过解析上下文contex中的原生node请求对象req,将Post表单数据解析成querystring(a=1&b=2&c=3),再嫁给你querystring解析成JSON格式
例子代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66const Koa = require('koa2')
const app = new Koa()
app.use(async ctx=>{
if(ctx.url === '/' && ctx.method ==='GET'){
//当GET请求时候返回表单页面
let html = `
<h1>koa2 request post demo</h1>
<form method="POST" action="/">
<p>userName</p>
<input name="userName" /><br/>
<p>nickName</p>
<input name="nickName" /><br/>
<p>email</p>
<input name="email" /><br/>
<button type="submit">submit</button>
</form>
`
ctx.body = html
}else if(ctx.url === '/' && ctx.method === 'POST'){
//当POST请求的时候,解析POST表单里的数据,并显示出来
let postData = await parsePostData(ctx)
ctx.body = postData
}else{
ctx.body = '<h1>404!!!'
}
})
//解析上下文里node原生请求的POST参数
function parsePostData(ctx){
return new Promise((resolve,reject) => {
try{
let postdata = "";
ctx.req.addListener('data',(data)=>{
postdata +=data
})
ctx.req.addListener('end',function(){
let parseData = parseQueryStr(postdata)
resolve(parseData)
})
}catch(err){
reject(err)
}
})
}
//将POST请求参数字符串解析成JSON
function parseQueryStr(queryStr){
let qeuryData = {}
let queryStrList = queryStr.split('&')
console.log(queryStrList)
//解析字符串
for( let [index,queryStr] of queryStrList.entries()){
let itemList = queryStr.split('=')
qeuryData[itemList[0]] = decodeURIComponent(itemList[1])
}
return qeuryData
}
app.listen(3000,()=>{
console.log('post is running at port 3000')
})
koa-bodyparser中间件
对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中
例子代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36const Koa = require('koa2')
const app = new Koa()
const bodyParser = require('koa-bodyparser')
app.use(bodyParser())
app.use( async ( ctx ) => {
if ( ctx.url === '/' && ctx.method === 'GET' ) {
// 当GET请求时候返回表单页面
let html = `
<h1>koa2 request post demo</h1>
<form method="POST" action="/">
<p>userName</p>
<input name="userName" /><br/>
<p>nickName</p>
<input name="nickName" /><br/>
<p>email</p>
<input name="email" /><br/>
<button type="submit">submit</button>
</form>
`
ctx.body = html
} else if ( ctx.url === '/' && ctx.method === 'POST' ) {
//POST请求时,会通过bodyparser中间件来解析表单里的数据
let postData = ctx.request.body
ctx.body = postData
} else {
// 其他请求显示404
ctx.body = '404'
}
})
app.listen(3000,()=>{
console.log('koa-bodyparsing is running ')
})
评论加载中