對於post請求處理,koa2沒有封裝輕便的方法獲取參數,需要通過解析上下文context中的原生node.js請求對象req來獲取。
獲取koa2post請求步驟:
解析上下文ctx中的原生nodex.js對象req。
- 將post表單數據解析成query String -字符串
- 將字符串轉換成json格式
ctx.requset跟ctx.req的具體區別,對於我們做深度編程時,有很大的幫助:
- ctx.request:是Koa2中context經過封裝的請求對象,它用起來更直觀和簡單。
- ctx.req:是context提供的node.js原生HTTP請求對象。這個雖然不那么直觀,但是可以得到更多的內容,適合我們深度編程。
ctx.method可以得到請求的類型,方便我們判斷是什么請求類型,進行不同的操作。
const Koa = require('koa'); const app = new Koa(); app.use(async(ctx)=>{ //當請求時GET請求時,顯示表單讓用戶填寫 // 我們利用上文中說到的ctx.method判斷請求的類型 if(ctx.url==='/' && ctx.method === 'GET'){ let html =` <form method="POST" action="/"> <p>userName</p> <input name="name" /> <br/> <p>age</p> <input name="sex" /> <br/> <p>webSite</p> <input name='way' /><br/> <button type="submit">submit</button> </form> `; // 如果是get請求我們把這個表單進行顯示,當點擊提交按鈕時,我們以post的方式進行提交 ctx.body =html; //當請求時POST請求時 }else if(ctx.url==='/' && ctx.method === 'POST'){ // 當請求為post請求的時候,我們在頁面中顯示下面的這句話,證明我們post請求參數是成功的 ctx.body='接收到請求'; } }) app.listen(3001,()=>{ console.log('success on port 3001'); })
當我們用node index.js啟動后會在命令行看到‘success on port 3001’,說明我們的代碼沒有錯,已經正常啟動,我們打開瀏覽器,輸入localhost:3001,頁面會出現如下圖所示的表單:
我們隨便輸入一些值,點擊submit提交按鈕后,出現如下圖所示:
原文:https://blog.csdn.net/Lschange/article/details/80590775