iKcamp|基於Koa2搭建Node.js實戰(含視頻)☞ HTTP請求

POST/GET請求——常見請求方式處理

🇨🇳 iKcamp 製做團隊

原創做者:大哼阿幹三三小虎胖子小哈DDU可木晃晃
文案校對:李益大力萌AuDDU小溪裏小哈
風采主播:可木阿幹AuDDU小哈
視頻剪輯:小溪裏
主站運營:給力xixty
教程主編:張利濤git


視頻地址:www.cctalk.com/v/151143577…github

文章

Http 請求

在學習了 koa-router 以後,咱們就能夠用它來處理一些常見的請求了,好比 POST/GETnpm


koa-router 提供了 .get.post.put.del 接口來處理各類請求,但實際業務上,咱們大部分只會接觸到 POSTGET,因此接下來只針對這兩種請求類型來講明。小程序


當咱們捕獲到請求後,通常都須要把請求帶過來的數據解析出來。數據傳遞過來的方式通常有三種:微信小程序


請求參數放在 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 說:『是時候登場了!』


首先,安裝 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

推薦: 翻譯項目Master的自述:

1. 乾貨|人人都是翻譯項目的Master

2. iKcamp出品微信小程序教學共5章16小節彙總(含視頻)


2019年,iKcamp原創新書《Koa與Node.js開發實戰》已在京東、天貓、亞馬遜、噹噹開售啦!

相關文章
相關標籤/搜索