這節(jié)主要學(xué)習(xí)POST請(qǐng)求的接受方法。對(duì)于POST請(qǐng)求的處理,Koa2沒有封裝方便的獲取參數(shù)的方法,需要通過解析上下文context中的原生node.js請(qǐng)求對(duì)象req來獲取。
獲取Post請(qǐng)求的步驟:
- 解析上下文ctx中的原生nodex.js對(duì)象req。
- 將POST表單數(shù)據(jù)解析成query string-字符串.(例如:user=jspang&age=18)
- 將字符串轉(zhuǎn)換成JSON格式。
ctx.request和ctx.req的區(qū)別
- ctx.request:是Koa2中context經(jīng)過封裝的請(qǐng)求對(duì)象,它用起來更直觀和簡單。
- ctx.req:是context提供的node.js原生HTTP請(qǐng)求對(duì)象。這個(gè)雖然不那么直觀,但是可以得到更多的內(nèi)容,適合我們深度編程。
ctx.method 得到請(qǐng)求類型
Koa2中提供了ctx.method屬性,可以輕松的得到請(qǐng)求的類型,然后根據(jù)請(qǐng)求類型編寫不同的相應(yīng)方法,這在工作中非常常用。我們先來作個(gè)小例子,根據(jù)請(qǐng)求類型獲得不同的頁面內(nèi)容。GET請(qǐng)求時(shí)得到表單填寫頁面,POST請(qǐng)求時(shí),得到POST處理頁面。
const Koa = require('koa');
const app = new Koa();
app.use(async(ctx)=>{
//當(dāng)請(qǐng)求時(shí)GET請(qǐng)求時(shí),顯示表單讓用戶填寫
if(ctx.url==='/' && ctx.method === 'GET'){
let html =`
<h1>Koa2 request post demo</h1>
<form method="POST" action="/">
<p>userName</p>
<input name="userName" /> <br/>
<p>age</p>
<input name="age" /> <br/>
<p>webSite</p>
<input name='webSite' /><br/>
<button type="submit">submit</button>
</form>
`;
ctx.body =html;
//當(dāng)請(qǐng)求時(shí)POST請(qǐng)求時(shí)
}else if(ctx.url==='/' && ctx.method === 'POST'){
ctx.body='接收到請(qǐng)求';
}else{
//其它請(qǐng)求顯示404頁面
ctx.body='<h1>404!</h1>';
}
})
app.listen(3000,()=>{
console.log('[demo] server is starting at port 3000');
})