Axios 小白從安裝到基礎的使用與封裝

安裝與使用

安裝:
npm install --save axios
使用:
import axios from 'axios'

文章下附Giee地址

一槐臀、請求類型

get、delete方式類似都可以用params請求粉渠,delete可以在請求體中請求,post、put撒璧、patch類似都是使用請求體請求并且可以有json/form-data兩種方式

GET

get請求的兩種寫法 (使用config 將參數(shù)放在params中)

    axios.get('/url', {
        params: {
            id: 12
        }
    }).then((res) => {
        console.log(res)
    })
    //另外一種寫法
    axios({
        method: 'get',
        url: '/url',
        params: {
            id: 12
        }
    }).then(res => {
        console.log(res)
    })

POST

post請求 (將參數(shù)放在請求體中)群扶,兩種方式json/form-data

// applicition/json
 let data = {
    id: 12
 }
 axios.post('/url', data).then(res => {
    console.log(res)
 })
 axios({
    method: 'post',
    url: '/post',
    data: data
 })
// form-data 表單提交(圖片上傳及刻,文件上傳)
    let formData = new FormData()
    for (let key in data) {
        formData.append(key, data[key])
    }
    axios.post('/url', formData).then(res => {
        console.log(res)
    })

PUT

put 請求 (將參數(shù)放在請求體中),兩種方式json/form-data

    // put請求
    axios.put('/put',data).then(res=>{
        console.log(res)
    })

PATCH

patch請求 (將參數(shù)放在請求體中)竞阐,兩種方式json/form-data

    // patch請求
    axios.patch('/patch',data).then(res=>{
        console.log(res)
    })

DELETE

delete (將參數(shù)放在請求體中 也可以將參數(shù)放在params中)

// delete請求
axios.delete('/delete', {
    params: {
        id: 12
    }
})
axios.delete('/delete', {
    data: {
        id: 12
    }
})

二缴饭、并發(fā)請求

并發(fā)請求:同時進行多個請求,并統(tǒng)一處理返回值

axios.all(
    [
        axios.get('/data.json'),
        axios.get('/city.json')
    ]
).then(
    axios.spread((dataRes, cityRes) => {
        console.log(dataRes, cityRes)
    })
)

三骆莹、axios實例

使用場景: 后端接口地址有多個颗搂,并且超時時長不一樣或者業(yè)務邏輯不同

axios.create({
    baseURL: 'http://localhost:8080', // 請求的域名,基本地址
    timeout: 1000, // 請求超時時長(ms)
    url: '/data.json', //請求路徑
    method: 'get,post,put,patch,delete', // 請求方法
    headers: {
        token: ''
    }, // 請求頭
    params: {}, //請求參數(shù)拼接在url上
    data: {}, //請求參數(shù)放在請求體
})

配置
全局配置幕垦、實例配置丢氢、請求配置
優(yōu)先級:全局配置<實例配置<請求配置

    // 1.axios全局配置
    axios.defaults.timeout =1000
    axios.defaults.baseURL = 'http://localhost:8080'
    // 2.axios實例配置
    let instance = axios.create()
    instance.defaults.timeout = 3000
    // 3.axios請求配置
    instance.get('/data.json',{
        timeout:5000
    })

四傅联、攔截器

攔截器:在請求或響應被處理前攔截他們
請求攔截器的用法

// 請求攔截器
 axios.interceptors.request.use(config => {
    // 在發(fā)送請求前做些什么
    return config
 }, err => {
    // 在請求錯誤的時候做些什么
    return Promise.reject(err)
 })

響應攔截器的用法

 // 響應攔截器
 axios.interceptors.response.use(res => {
    // 請求成功對響應數(shù)據(jù)做處理
    return res
 }, err => {
    // 響應錯誤做些什么
    return Promise.reject(err)
 })

取消攔截器

let interceptors = axios.interceptors.request.use(config => {
        config.headers = {
            auth: true
        }
        return config
    })
axios.interceptors.request.eject(interceptors)

五、錯誤處理與取消處理

錯誤處理:在攔截器中用err疚察,如果某請求后面需要單獨處理錯誤蒸走,則使用catch()

// 例子:實際開發(fā)過程中,一般添加統(tǒng)一錯誤處理
    let instance = axios.create({})
    instance.interceptors.request(config => {
        return config
    }, err => {
        // 請求錯誤 一般http狀態(tài)碼以4開頭貌嫡,常見:401超時比驻,404 not found
        $('#modal').show()
        setTimeout(() => {
            $('#modal').hide()
        }, 2000)
        return Promise.reject(err)
    })
    instance.interceptors.response.use(res => {
        return res
    }, err => {
        // 響應錯誤處理 一般http狀態(tài)碼以5開頭,500 系統(tǒng)錯誤岛抄,502, 系統(tǒng)重啟
        $('#modal').show()
        setTimeout(() => {
            $('#modal').hide()
        }, 2000)
        return Promise.reject(err)
    })
    instance.get('/data.json').then(res=>{
        console.log(res)
    }).catch(err=>{
            //單獨處理錯誤樣式
        console.log(err)
    })

六嫁艇、取消請求

用于取消正在進行的http請求

let source = axios.CancelToken.source()
axios.get('/data.json', {
    cancelToken: source.token
}).then(res => {
    console.log(res)
}).catch(err => {
        //取消請求后返回的messge信息
    console.log(err)
})

// 取消請求(message可選)
source.cancel('cancel http')

七、封裝axios

// service 循環(huán)遍歷輸出不同的請求方法
let instance = axios.create({
    baseURL: 'http://localhost:9000/api',
    timeout: 1000
})
const Http = {}; // 包裹請求方法的容器

// 請求格式/參數(shù)的統(tǒng)一
for (let key in service) {
    let api = service[key]; // url method
    // async 作用:避免進入回調(diào)地獄
    Http[key] = async function(
        params, // 請求參數(shù) get:url弦撩,put步咪,post,patch(data)益楼,delete:url
        isFormData = false, // 標識是否是form-data請求
        config = {} // 配置參數(shù)
    ) {
        let newParams = {}

        //  content-type是否是form-data的判斷
        if (params && isFormData) {
            newParams = new FormData()
            for (let i in params) {
                newParams.append(i, params[i])
            }
        } else {
            newParams = params
        }
        // 不同請求的判斷
        let response = {}; // 請求的返回值
        if (api.method === 'put' || api.method === 'post' || api.method === 'patch') {
            try {
                response = await instance[api.method](api.url, newParams, config)
            } catch (err) {
                response = err
            }
        } else if (api.method === 'delete' || api.method === 'get') {
            config.params = newParams
            try {
                response = await instance[api.method](api.url, config)
            } catch (err) {
                response = err
            }
        }
        return response; // 返回響應值
    }
}

// 攔截器的添加
// 請求攔截器
instance.interceptors.request.use(config => {
    // 發(fā)起請求前做些什么
    Toast.loading({
        mask: false,
        duration: 0, // 一直存在
        forbidClick: true, // 禁止點擊
        message: '加載中...'
    })
    return config
}, () => {
    // 請求錯誤
    Toast.clear()
    Toast('請求錯誤猾漫,請求稍后重試')
})
// 響應攔截器
instance.interceptors.response.use(res => {
    // 請求成功
    Toast.clear()
    return res.data
}, () => {
    Toast.clear()
    Toast('請求錯誤,請求稍后重試')
})

附:node后臺接口服務

后臺接口服務目錄在gitee代碼倉庫根目錄的axios_node下
如何啟動感凤?
進入axios_node目錄悯周,首先需要安裝依賴npm install,依賴安裝完成后輸入node index.js啟動服務

代碼倉庫地址 https://gitee.com/EverZc/VueAxios.git

如需文章上方axios X-Mind思維腦圖文件陪竿,關注微信公眾號:文靖撩知識 禽翼,回復axios 即可領取。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末族跛,一起剝皮案震驚了整個濱河市闰挡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌礁哄,老刑警劉巖长酗,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桐绒,居然都是意外死亡夺脾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門茉继,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咧叭,“玉大人,你說我怎么就攤上這事烁竭》撇纾” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長生均。 經(jīng)常有香客問我听想,道長,這世上最難降的妖魔是什么马胧? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任汉买,我火速辦了婚禮,結(jié)果婚禮上佩脊,老公的妹妹穿的比我還像新娘蛙粘。我一直安慰自己,他們只是感情好威彰,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布出牧。 她就那樣靜靜地躺著,像睡著了一般歇盼。 火紅的嫁衣襯著肌膚如雪舔痕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天豹缀,我揣著相機與錄音伯复,去河邊找鬼。 笑死邢笙,一個胖子當著我的面吹牛啸如,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氮惯,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼叮雳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妇汗?” 一聲冷哼從身側(cè)響起帘不,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铛纬,沒想到半個月后厌均,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡告唆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晶密。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擒悬。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖稻艰,靈堂內(nèi)的尸體忽然破棺而出懂牧,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布僧凤,位于F島的核電站畜侦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躯保。R本人自食惡果不足惜旋膳,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望途事。 院中可真熱鬧验懊,春花似錦、人聲如沸尸变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽召烂。三九已至碱工,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奏夫,已是汗流浹背怕篷。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶蛔,地道東北人匙头。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像仔雷,于是被迫代替她去往敵國和親蹂析。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • axios 基于promise用于瀏覽器和node.js的http客戶...
    蔡威大爺閱讀 252評論 0 1
  • axios 基于 Promise 的 HTTP 請求客戶端碟婆,可同時在瀏覽器和 node.js 中使用 功能特性 在...
    Yanghc閱讀 3,640評論 0 7
  • 本周在做一個使用vuejs的前端項目电抚,訪問后端服務使用axios庫,這里對照官方文檔竖共,簡單記錄下蝙叛,也方便大家參考。...
    JadePeng閱讀 11,138評論 1 59
  • 一公给、安裝 1借帘、 利用npm安裝npm install axios --save 2、 利用bower安裝bower...
    kiddings閱讀 1,750評論 0 3
  • axios插件的使用操作 axios插件的使用操作 axios [圖片上傳失敗...(image-744a97-1...
    魔仙堡杠把子灬閱讀 3,038評論 0 1