MockjsはバンドパラメータのGET要求をどのようにブロックするか

5651 ワード

質問を出す
以前、VueプロジェクトでMockjsをどのように使用するかを書いたが、アナログインタフェースから返されたデータは、前後の分離を実現し、独立して開発された読書量が高いという.Mockjsは非常に人気があるようだ.実践の過程で,Mockjs自体がGETリクエストに対するサポートが友好的ではないことが分かった.例えば、Mock.mock("/user/getUserInfo", "get", mockData)を使用する場合、urlが/user/getUserInfoに等しい要求のみをブロックし、/user/getUserInfo?id=12に等しくないとブロックできないため、パラメータ付き要求、例えば/user/getUserInfoをブロックする.
解決策
この問題を解決するのは簡単です.Mock.mockの方法を見てみましょう.Mock.mock( rurl, rtype, template )のrurlの定義は
rurlはオプションです.ブロックする必要があるURLを表し、URL文字列またはURL正則であってもよい.たとえば//domain/list.json/、'/domian/list.json'です.
すなわちrurlパラメータは正則的に伝達できる.GETリクエストにとって最も簡単な方法は、すべてのurlに対して正則を使用することです.次のようになります.Mock.mock(RegExp(url + ".*"), "get", mockData);
この簡単で乱暴なやり方は極端な場合に問題があるかもしれませんが、一般的には十分です.urlが似ていて衝突する可能性がある場合は、厳格な正則を書いて置き換えればいいです.
例:
import ApiPath from "@/api/ApiPath"
const Mock = require("mockjs")
let mockUserInfo = {
    "code": 0,
    "data": {
      "fullName": "@CNAME", //         
      "userId": 1000234234001,
    }
};
Mock.mock(RegExp(ApiPath.user.getUserInfo + ".*"), "get", (options) =>{
    //     ,           ,    
    console.debug(ApiPath.user.getUserInfo, options);
    return Mock.mock(mockUserInfo);
});

要求パラメータについて
ブロックを書くときに、urlやパラメータなどの情報を含むパラメータoptionsを渡す方法があります.options.urlで具体的なurlを手に入れることができ、options.bodyで要求パラメータを手に入れることができます.ブロックした後、このoptionsをコンソールに印刷することは、デバッグに非常に役立ちます.また、要求パラメータを取得することで、異なる戻り値を実現することができる.
Mock.mock(RegExp(ApiPath.user.getUserInfo + ".*"), "get", (options) =>{
    //     ,           ,    
    console.debug(ApiPath.user.getUserInfo, options);
    return Mock.mock(mockUserInfo);
});