原創做者:大哼、阿幹、三三、小虎、胖子、小哈、DDU、可木、晃晃
文案校對:李益、大力萌、Au、DDU、小溪裏、小哈
風采主播:可木、阿幹、Au、DDU、小哈
視頻剪輯:小溪裏
主站運營:給力xi、xty
教程主編:張利濤git
視頻地址:https://www.cctalk.com/v/15114357765870github
在學習了
koa-router
以後,咱們就能夠用它來處理一些常見的請求了,好比POST/GET
。npm
koa-router
提供了 .get
、.post
、.put
和 .del
接口來處理各類請求,但實際業務上,咱們大部分只會接觸到 POST
和 GET
,因此接下來只針對這兩種請求類型來講明。小程序
當咱們捕獲到請求後,通常都須要把請求帶過來的數據解析出來。數據傳遞過來的方式通常有三種:微信小程序
URL
後面http://localhost:3000/home?id=12&name=ikcamp
koa-router
封裝的 request
對象,裏面的 query
方法或 querystring
方法能夠直接獲取到 Get
請求的數據,惟一不一樣的是 query
返回的是對象,而 querystring
返回的是字符串。瀏覽器
修改 app.js
,咱們加入解析方式:微信
const Koa = require('koa') const router = require('koa-router')() const app = new Koa() router.get('/', async(ctx, next) => { ctx.response.body = `<h1>index page</h1>` }) router.get('/home', async(ctx, next) => { console.log(ctx.request.query) console.log(ctx.request.querystring) ctx.response.body = '<h1>HOME page</h1>' }) router.get('/404', async(ctx, next) => { ctx.response.body = '<h1>404 Not Found</h1>' }) // add router middleware: app.use(router.routes()) app.listen(3000, () => { console.log('server is running at http://localhost:3000') })
運行代碼,並經過瀏覽器訪問 http://localhost:3000/home?id=12&name=ikcamp
,而後打開控制檯會看到下面的輸出內容:app
{ id: '12', name: 'ikcamp' } id=12&name=ikcamp
URL
中間http://localhost:3000/home/12/ikcamp
這種狀況下,解析方式確定與上面的不同了,koa-router
會把請求參數解析在 params
對象上,咱們修改 app.js
文件,增長新的路由來測試下:koa
// 增長以下代碼 router.get('/home/:id/:name', async(ctx, next)=>{ console.log(ctx.params) ctx.response.body = '<h1>HOME page /:id/:name</h1>' })
運行代碼,並經過瀏覽器訪問 http://localhost:3000/home/12/ikcamp
,而後查看下控制檯顯示的日誌信息:async
{ id: '12', name: 'ikcamp' }
body
中當用 post
方式請求時,咱們會遇到一個問題:post
請求一般都會經過表單或 JSON
形式發送,而不管是 Node
仍是 Koa
,都 沒有提供 解析 post
請求參數的功能。
首先,安裝 koa-bodyparser
包:
npm i koa-bodyparser -S
安裝完成以後,咱們須要在 app.js
中引入中間件並應用:
const Koa = require('koa') const router = require('koa-router')() const bodyParser = require('koa-bodyparser') const app = new Koa() app.use(bodyParser()) router.get('/', async(ctx, next) => { ctx.response.body = `<h1>index page</h1>` }) router.get('/home', async(ctx, next) => { console.log(ctx.request.query) console.log(ctx.request.querystring) ctx.response.body = '<h1>HOME page</h1>' }) router.get('/home/:id/:name', async(ctx, next)=>{ console.log(ctx.params) ctx.response.body = '<h1>HOME page /:id/:name</h1>' }) router.get('/404', async(ctx, next) => { ctx.response.body = '<h1>404 Not Found</h1>' }) app.use(router.routes()) app.listen(3000, () => { console.log('server is running at http://localhost:3000') })
而後咱們來試着寫一個簡單的表單提交實例。修改 app.js
增長以下代碼,實現增長表單頁面的路由:
// 增長返回表單頁面的路由 router.get('/user', async(ctx, next)=>{ ctx.response.body = ` <form action="/user/register" method="post"> <input name="name" type="text" placeholder="請輸入用戶名:ikcamp"/> <br/> <input name="password" type="text" placeholder="請輸入密碼:123456"/> <br/> <button>GoGoGo</button> </form> ` })
繼續修改 app.js
增長以下代碼,實現 post
表單提交對應的路由:
// 增長響應表單請求的路由 router.post('/user/register',async(ctx, next)=>{ let {name, password} = ctx.request.body if( name === 'ikcamp' && password === '123456' ){ ctx.response.body = `Hello, ${name}!` }else{ ctx.response.body = '帳號信息錯誤' } })
常見的幾種請求,以及相應的參數傳遞解析,咱們已經學習過了。下一節中,咱們會把項目整理重構下,作個分層,並引入視圖層。
下一篇:代碼分層——梳理代碼,漸近於 MVC 分層模式
上一篇:iKcamp新課程推出啦~~~~~iKcamp|基於Koa2搭建Node.js實戰(含視頻)☞ 路由koa-router