手把手搭建koa2后端服務(wù)器-其他類型請求參數(shù)處理
前面我們已經(jīng)介紹了基礎(chǔ) web 框架用到的簡單功能,也完善了項目文件結(jié)構(gòu),接下來業(yè)務(wù)邏輯處理只要按照目錄用途添加對應(yīng)的文件和邏輯就可以了。這章我們來看一下常用的請求參數(shù)獲取處理邏輯。
Post 請求體
請求體參數(shù)我們在登錄和注冊接口中已經(jīng)使用到了,就是 ctx.request.body 中的對象,對于表單或者 Json 都可以處理,在前端通過 Post 消息的 data 攜帶消息體即可,這里就不再做介紹了。
Get 查詢參數(shù)
在 get 請求中,我們經(jīng)常使用 ?name=xxx&age=11 這種方式傳遞參數(shù)給后端,koa2 中我們可以使用 ctx.query 或者 ctx.querystring 獲取查詢參數(shù),通常情況下我們使用 ctx.query就行了,因為它會把我們的參數(shù)處理成對象的方式,更方便使用,而且在參數(shù)驗證的處理中,我們也使用了這種方式去處理。
const validate = async <T extends Value>(
ctx: Context,
rules: Rules,
): Promise<{ data: T; error: string }> => {
const validator = new Schema(rules);
let data: any = null;
switch (ctx.method) {
case 'GET':
data = ctx.query;
break;
case 'POST':
data = ctx.request.body;
break;
......
}
......
};
但是在一些特殊情況下,例如 ?xxxxxxx 這種請求中,參數(shù)并不是鍵值對的方式,而是一串字符串,這時我們就應(yīng)該采用 ctx.querystring 的方式來獲取其值。對于查詢參數(shù),我們寫一個例子來測試一下:
增加查詢指定用戶信息接口
// src/controller/user/view.ts
class UserController {
async getUserInfo(ctx: Context) {
console.log(ctx.query);
response.success(ctx, ctx.query, '獲取用戶信息成功');
}
}
配置路由
// src/controller/user/router.ts
router.get('/getUserInfo', UserController.getUserInfo);
在瀏覽器中我們請求:
http://localhost:3300/getUserInfo?name=張三&age=12,返回消息如下
路徑參數(shù)
除了請求體參數(shù)和查詢參數(shù)外,還有一類參數(shù)—路徑參數(shù),請求方式類似這種:/getUserInfo/123、/getUserInfo/231,參數(shù)獲取方法非常簡單:ctx.params,主要是路由定義方式有所不同,看下面的例子:
// src/controller/user/view.ts
async getUserInfo(ctx: Context) {
console.log(ctx.params);
response.success(ctx, ctx.params, '獲取用戶信息成功');
}
// src/controller/user/router.ts
router.get('/getUserInfo/:name', UserController.getUserInfo);
我們通過瀏覽器訪問:
http://localhost:3300/getUserInfo/tom,name為tom