koa作為一個實現(xiàn)Web應用與API交流的中間件框架横殴,在日常生活中十分常見。
在寫接口時卿拴,通常要通過請求格式和請求信息來判斷這個請求是否正確衫仑,如果正確,則可以進一步獲得后端給的數(shù)據(jù)堕花。
在這個過程中惑畴,如何獲取到請求中的重要信息呢?
首先想獲取信息航徙,一定要在API的回調(diào)函數(shù)里獲取。
<code>
// const?bodyParser = require('koa-bodyparser')
// app.use(bodyParser())
router.post('/api', async (ctx, next) => {
// 請求的信息都可以通過ctx獲取到
// ctx是一個請求的上下文(context)
// next是調(diào)用執(zhí)行下游中間件的函數(shù)陷虎,在代碼執(zhí)行完成后通過then方法返回一個Promise
//?ctx?=?{
//???"request":?{
//?????"method":?"POST",
//?????"url":?"/api",
//?????"header":?{
//???????"host":?"localhost:9000",
//???????"connection":?"keep-alive",
//???????"content-length":?"88",
//???????"pragma":?"no-cache",
//???????"cache-control":?"no-cache",
//???????"sec-ch-ua":?"\"?Not;A?Brand\";v=\"99\",?\"Google?Chrome\";v=\"91\",?\"Chromium\";v=\"91\"",
//???????"accept":?"application/json,?text/plain,?*/*",
//???????"sec-ch-ua-mobile":?"?0",
//???????"user-agent":?"screct",
//???????"content-type":?"application/json;charset=UTF-8",
//???????"origin":?"http://localhost:3000",
//???????"sec-fetch-site":?"same-site",
//???????"sec-fetch-mode":?"cors",
//???????"sec-fetch-dest":?"empty",
//???????"referer":?"http://localhost:3000/",
//???????"accept-encoding":?"gzip,?deflate,?br",
//???????"accept-language":?"zh-CN,zh;q=0.9"
//?????}
//???},
//???"response":?{
//?????"status":?404,
//?????"message":?"Not?Found",
//?????"header":?{
//???????"access-control-allow-origin":?"*",
//???????"haha":?"http://localhost:3000",
//???????"access-control-allow-headers":?"Content-Type,?Access-Control-Allow-Headers,?X-Requested-With"
//?????}
//???},
//???"app":?{
//?????"subdomainOffset":?2,
//?????"proxy":?false,
//?????"env":?"development"
//???},
//???"originalUrl":?"/api",
//???"req":?"<original?node?req>",
//???"res":?"<original?node?res>",
//???"socket":?"<original?node?socket>"
//?}
// 這里的許多參數(shù)都可以直接通過對象.的方法拿到到踏,在獲取請求體body數(shù)據(jù)時
// 會發(fā)現(xiàn)直接獲取拿到的是undefined或者是{}
// 這個時候可以在接口定義的上面先加入koa-bodyParser中間件
// 引入這個中間件后 就可以通過ctx.request.body獲取到請求體里的數(shù)據(jù)
</code>
參考文章:https://github.com/koajs/bodyparser