從零搭建React框架--第四章網(wǎng)絡(luò)請求axios斯稳、http-proxy-middleware海铆、mockjs

目錄

引言
第一章:項目創(chuàng)建、antd挣惰、less
第二章:路由攔截卧斟、路由嵌套
第三章:狀態(tài)管理 Redux
第四章:網(wǎng)絡(luò)請求、代理憎茂、mockjs
第五章:webpack配置
第六章:Eslint

源碼地址

https://github.com/dxn920128/cms-base

安裝axios

npm install -S -D axios qs @types/qs
  • axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端
  • qs

創(chuàng)建axios對象

const service = axios.create({
  timeout: 2 * 60 * 1000,// 請求超時時間
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

request攔截器珍语,為每一條網(wǎng)絡(luò)請求添加token等多種請求參數(shù)。

service.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    if (config.params) {
      for (const item in config.params) {
        if (item === null) {
          delete config.params[item]
        }
      }
    }
    if (config && config.headers) {
      const token = getToken()
      if (token) {
        config.headers['X-KT-Login-Token'] = token
      }
    }
    return config
  },
  (error: AxiosError) => {
    return Promise.reject(error)
  }
)

response攔截器竖幔,對請求異常板乙、登錄過期、無權(quán)限等狀態(tài)進(jìn)行管理。

service.interceptors.response.use(
  (response: AxiosResponse<ResponseData<any>>) => {
    const res = response.data
    switch (res.code) {
      case 0://正常數(shù)據(jù)
        return response
      case 10104://登錄超時
        store.dispatch(logout())
        window.location.href = `${window.location.origin}`
        return Promise.reject(res.message)
    }
    message.error(response.data.message)
    return Promise.reject(new Error(response.data.message))
  },
  (error) => {
    return Promise.reject(error)
  }
)

請求代理

devServer: {
    proxy: {
      '/cmsapi': {
        target: '',
        changeOrigin: true,
        pathRewrite: {
          '^/cmsapi': ''
        }
      }
    }
}

配置mockjs數(shù)據(jù)

npm install -D mocker-api mockjs cross-env
  • mocker-api 為REST API創(chuàng)建模擬請求募逞,在開發(fā)過程中方便調(diào)試蛋铆。
  • mockjs 生成模擬數(shù)據(jù)
  • cross-env 跨平臺設(shè)置環(huán)境變量
devServer: {
    //如果使用mocker-api庫
    before (app) {
      if (process.env.MOCKER_ENV) {
        apiMocker(app, path.resolve('./mocker/index.js'), {})
      }
    }
  },

在package.json中配置mocker啟動命令

    "start:mocker": "cross-env port=4000 cross-env MOCKER_ENV=true craco start",
啟動項.png

craco全部配置

const path = require('path')
const CracoLessPlugin = require('craco-less')
const apiMocker = require('mocker-api')//使用mocker-api庫
module.exports = {
  plugins: [
    {
      plugin: CracoLessPlugin,//引入less
      options: {
        lessLoaderOptions: {
          lessOptions: {
            javascriptEnabled: true //js修改主題樣式
          }
        }
      }
    }
  ],
  babel: {
    plugins: [
      ['@babel/plugin-proposal-decorators', { legacy: true }], //裝飾器
      [
        'import',//按需引入antd 樣式
        {
          'libraryName': 'antd',
          'libraryDirectory': 'es',
          'style': true
        }
      ]
    ]
  },
  devServer: {
    proxy: {
      '/cmsapi': {
        target: '',
        changeOrigin: true,
        pathRewrite: {
          '^/cmsapi': ''
        }
      }
    },
    //如果使用mocker-api庫
    before (app) {
      if (process.env.MOCKER_ENV) {
        apiMocker(app, path.resolve('./mocker/index.js'), {})
      }
    }
  },
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市放接,隨后出現(xiàn)的幾起案子刺啦,更是在濱河造成了極大的恐慌,老刑警劉巖纠脾,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玛瘸,死亡現(xiàn)場離奇詭異,居然都是意外死亡苟蹈,警方通過查閱死者的電腦和手機(jī)糊渊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慧脱,“玉大人渺绒,你說我怎么就攤上這事×琢觯” “怎么了芒篷?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵搜变,是天一觀的道長采缚。 經(jīng)常有香客問我,道長挠他,這世上最難降的妖魔是什么扳抽? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮殖侵,結(jié)果婚禮上贸呢,老公的妹妹穿的比我還像新娘。我一直安慰自己拢军,他們只是感情好楞陷,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茉唉,像睡著了一般固蛾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上度陆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天艾凯,我揣著相機(jī)與錄音,去河邊找鬼懂傀。 笑死趾诗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹬蚁。 我是一名探鬼主播恃泪,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼郑兴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贝乎?” 一聲冷哼從身側(cè)響起杈笔,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糕非,沒想到半個月后蒙具,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朽肥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年禁筏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡招。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡篱昔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出始腾,到底是詐尸還是另有隱情州刽,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布浪箭,位于F島的核電站穗椅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奶栖。R本人自食惡果不足惜匹表,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宣鄙。 院中可真熱鬧袍镀,春花似錦、人聲如沸冻晤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼻弧。三九已至设江,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間温数,已是汗流浹背绣硝。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留撑刺,地道東北人鹉胖。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親甫菠。 傳聞我的和親對象是個殘疾皇子挠铲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344