Koa2學習(三)GET請求

Koa2學習(三)GET請求

GET請求是先後端交互最經常使用的請求之一,經常用來進行查詢操做。
那麼Koa是如何接收並處理GET請求呢?javascript

建立一個服務

// 引入Koa
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
    ctx.body = 'Hello World'
})
app.listen(8000)

module.exports = app
  1. 其中ctx是Koa2很是重要的一個上下文對象,能夠把它理解爲一個全局的頂層對象,Koa2裏面絕大部分的屬性和方法均可以經過ctx對象獲取。
  2. 其中ctx.body就是返回的html內容。
  3. app.listen(...)是koa2的一個語法糖,等於運行了下面這兩個方法,實質就是調用http模塊建立一個監聽端口的服務。
  4. 每收到一個http請求,koa就會調用經過app.use()註冊的async函數,並傳入ctx和next參數。
const http = require('http');
http.createServer(app.callback()).listen(...);

接收請求

koa2每個請求都會被傳入到app.use()方法中,app.use會把請求信息放入到ctx中,咱們能夠從ctx中獲取請求的基本信息。html

app.use(async ctx => {
    const url = ctx.url // 請求的url
    const method = ctx.method   // 請求的方法
    const query = ctx.query // 請求參數
    const querystring = ctx.querystring // url字符串格式的請求參數
    ctx.body = {
        url,
        method,
        query,
        querystring,
    }
})

如今訪問localhost:8000?username=zj能夠看到瀏覽器返回java

{
    "url": "/?username=zj",
    "method": "GET",
    "query": {
        "username": "zj"
    },
    "querystring": "username=zj"
}

請求url是/?username=zj,請求方法是GET,請求參數是username=zjweb

ctx還有一個request對象,是http請求對象,咱們也能夠從ctx.request中獲取上面的參數。json

app.use(async ctx => {
    const req = ctx.request
    const url = req.url // 請求的url
    const method = req.method   // 請求的方法
    const query = req.query // 請求參數
    const querystring = req.querystring // url字符串格式的請求參數
    ctx.body = {
        url,
        method,
        query,
        querystring,
        req,
    }
})

瀏覽器訪問結果:後端

{
    "url": "/?username=zj",
    "method": "GET",
    "query": {
        "username": "zj"
    },
    "querystring": "username=zj",
    "req": {
        "method": "GET",
        "url": "/?username=zj",
        "header": {
            "host": "localhost:8000",
            "connection": "keep-alive",
            "cache-control": "max-age=0",
            "upgrade-insecure-requests": "1",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
            "accept-encoding": "gzip, deflate, br",
            "accept-language": "zh-CN,zh;q=0.9",
            "cookie": "_ga=GA1.1.1379681827.1520244125"
        }
    }
}

總結

  1. 咱們經過app.use()方法,接收並處理http GET請求。
  2. 經過app.use()中傳入async方法的ctx對象或者ctx.request獲取到請求信息。
相關文章
相關標籤/搜索