Vue使用Axios實(shí)現(xiàn)http請(qǐng)求以及解決跨域問題


Axios 是一個(gè)基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中痪寻。Axios的中文文檔以及github地址如下:

中文:https://www.kancloud.cn/yunye/axios/234845github:https://github.com/axios/axios

vue路由文檔:https://router.vuejs.org/zh/

一凑懂、安裝Axios插件

npm install axios --save

二煤痕、在main.js中引入Axios庫

import Axios from "axios"

//將axios掛載到原型上

Vue.prototype.$axios = Axios;

//配置全局的axios默認(rèn)值(可選)

axios.defaults.baseURL = 'https://api.example.com';

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

三、使用get方式的http請(qǐng)求

this.$axios.get("請(qǐng)求url",{param:{}})

? ? ? ? ? .then(function(response){

? ? ? ? ? ? ? ? ? console.info(response.data);

? ? ? ? ? ? ? ? })

? ? ? ? ? .catch(function(error){

? ? ? ? ? ? ? ? ? console.info(error);

? ? ? ? ? ? ? ? });

四征候、使用post方式的http請(qǐng)求

this.$axios.post("請(qǐng)求路徑",{})

? ? ? ? ? .then(function(response){

? ? ? ? ? ? ? ? ? console.info(response.data);

? ? ? ? ? ? ? ? })

? ? ? ? ? .catch(function(error){

? ? ? ? ? ? ? ? ? console.info(error);

? ? ? ? ? ? ? ? });

注意:使用上述post方式提交參數(shù)的時(shí)候存在問題杭攻,axios中post的請(qǐng)求參數(shù)格式是form-data格式。而上述json串的格式為x-www-form-urlencoded格式

例如:

form-data:?name="zhangsan"&age=10?

x-www-form-urlencoded:{name:"zhangsan",age:10}

此時(shí)我們需要將數(shù)據(jù)格式作轉(zhuǎn)換疤坝,在當(dāng)前頁面引入第三方庫qs

import qs from "qs"

此時(shí)上述參數(shù)改為:

this.$axios.post("請(qǐng)求路徑",qs.stringify({}))

? ? ? ? ? .then(function(response){

? ? ? ? ? ? ? ? ? console.info(response.data);

? ? ? ? ? ? ? ? })

? ? ? ? ? .catch(function(error){

? ? ? ? ? ? ? ? ? console.info(error);

? ? ? ? ? ? ? ? });

五兆解、Axios的攔截器

? 攔截器在main.js中進(jìn)行配置,配置如下:

// 添加請(qǐng)求攔截器

axios.interceptors.request.use(function (config) {

? ? // 在發(fā)送請(qǐng)求之前做些什么

? ? return config;

? }, function (error) {

? ? // 對(duì)請(qǐng)求錯(cuò)誤做些什么

? ? return Promise.reject(error);

? });

// 添加響應(yīng)攔截器

axios.interceptors.response.use(function (response) {

? ? // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么

? ? return response;

? }, function (error) {

? ? // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么

? ? return Promise.reject(error);

? });

基于以上的攔截器跑揉,我們可以對(duì)請(qǐng)求的數(shù)據(jù)或者是響應(yīng)的數(shù)據(jù)做些處理锅睛,就拿上面post方式的請(qǐng)求參數(shù)格式舉個(gè)例子,通過攔截器我們可以對(duì)所有的post方式的請(qǐng)求參數(shù)在發(fā)出請(qǐng)求之前作出轉(zhuǎn)換:

import qs from "qs"

// 添加請(qǐng)求攔截器

axios.interceptors.request.use(function (config) {

? ? // 參數(shù)格式轉(zhuǎn)換

? ? if(config.method=="post"){

? ? ? ? config.data = qs.stringify(config.data);

? ? }

? ? return config;

? }, function (error) {

? ? // 對(duì)請(qǐng)求錯(cuò)誤做些什么

? ? return Promise.reject(error);

? });

? 因此基于攔截器我們?cè)趐ost請(qǐng)求的時(shí)候可以直接使用from-data的格式历谍,不需要每次都編碼轉(zhuǎn)換

?六现拒、前端跨域解決方案(了解)

描述:由于使用vue腳手架的目的就是使前后端分離,前端請(qǐng)求后端的數(shù)據(jù)在測(cè)試階段設(shè)計(jì)到跨域請(qǐng)求問題望侈,在前端中我們可以通過如下配置解決跨域請(qǐng)求問題印蔬。

? 第一步(在config文件夾下的index.js中進(jìn)行如下修改)

proxyTable:{

? ? "/api":{

? ? ? ? target:"后端提供服務(wù)的前綴地址",

? ? ? ? changeOrigin:true,

? ? ? ? pathRewrite:{

? ? ? ? ? ? ? '^/api':''

? ? ? ? }

? ? }

},

? 第二步(在main.js中添加一個(gè)代理)

Vue.prototype.HOST='/api'

?再進(jìn)行請(qǐng)求的時(shí)候只需要使用url = this.HOST+"請(qǐng)求的Mappering地址"即可。

(注意:在上述過程中修改了config下的配置文件脱衙,服務(wù)需要重新啟動(dòng)侥猬,才能生效)

例如:

1:打開config/index.js

module.exports{

????dev: {

????}

}

在這里面找到proxyTable{},改為這樣:

proxyTable: {

??????'/api': {

????????target:?'http://121.41.130.58:9090',//設(shè)置你調(diào)用的接口域名和端口號(hào) 別忘了加http

????????changeOrigin:?true,

????????pathRewrite: {

??????????'^/api':?''//這里理解成用‘/api’代替target里面的地址捐韩,后面組件中我們掉接口時(shí)直接用api代替 比如我要調(diào)用'http://40.00.100.100:3002/user/add'退唠,直接寫‘/api/user/add’即可

????????}

??????}

????}

2:在需要調(diào)接口的組件中這樣使用:

axios.post('/api/yt_api/login/doLogin',postData)

????.then(function (response) {

????????console.log(1)

????????console.log(response);

????})

????.catch(function (error) {

????????console.log(error);

????})

 注意:原接口:http://http://121.41.130.58:9090/yt_api/login/doLogin

頁面調(diào)用:http://localhost:8081/api/yt_api/login/doLogin ——這里多了一個(gè)/api/不是多余的,不要?jiǎng)h


七?axios傳參

1:Vue官方推薦組件axios默認(rèn)就是提交 JSON 字符串荤胁,所以我們要以json字符串直接拼接在url后面的形式瞧预,直接將json對(duì)象傳進(jìn)去就行了

let postData = {

companyCode:'tur',

userName:'123456789123456789',

password:'123456'

}

axios.get('/api/yt_api/login/doLogin',{

params: {

...postData,

}

})

.then(function (response) {

console.log(1)

console.log(response);

})

.catch(function (error) {

console.log(error);

});

這里我們將postData這個(gè)json對(duì)象傳入到post方法中,頁面中的形式為:


2:以key:val的形式傳參

let?postData = qs.stringify({

????companyCode:'tur',

????userName:'123456789123456789',

????password:'123456'

})

我們需要對(duì)這個(gè)json對(duì)象操作,這里的qs你需要先安裝

1npm install qs

再導(dǎo)入

1import qs?from?'qs'

面中的形式為:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垢油,一起剝皮案震驚了整個(gè)濱河市盆驹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秸苗,老刑警劉巖召娜,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运褪,死亡現(xiàn)場(chǎng)離奇詭異惊楼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秸讹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門檀咙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璃诀,你說我怎么就攤上這事弧可。” “怎么了劣欢?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵棕诵,是天一觀的道長。 經(jīng)常有香客問我凿将,道長校套,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任牧抵,我火速辦了婚禮笛匙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犀变。我一直安慰自己妹孙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布获枝。 她就那樣靜靜地躺著蠢正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪省店。 梳的紋絲不亂的頭發(fā)上嚣崭,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音萨西,去河邊找鬼有鹿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谎脯,可吹牛的內(nèi)容都是我干的葱跋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼娱俺!你這毒婦竟也來了稍味?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤荠卷,失蹤者是張志新(化名)和其女友劉穎模庐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體油宜,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掂碱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慎冤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疼燥。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚁堤,靈堂內(nèi)的尸體忽然破棺而出醉者,到底是詐尸還是另有隱情,我是刑警寧澤披诗,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布撬即,位于F島的核電站,受9級(jí)特大地震影響呈队,放射性物質(zhì)發(fā)生泄漏剥槐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一掂咒、第九天 我趴在偏房一處隱蔽的房頂上張望才沧。 院中可真熱鬧,春花似錦绍刮、人聲如沸温圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岁歉。三九已至,卻和暖如春膝蜈,著一層夾襖步出監(jiān)牢的瞬間腋粥,已是汗流浹背源内。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洽腺。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓辖源,卻偏偏與公主長得像涩蜘,于是被迫代替她去往敵國和親议泵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子券坞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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