vue-cli 引入axios及跨域使用

使用 cnpm 安裝 axios
cnpm install axios --save

安裝其他插件的時(shí)候荤傲,可以直接在 main.js 中引入并 Vue.use()描姚,但是 axios 并不能 use,只能每個(gè)需要發(fā)送請(qǐng)求的組件中即時(shí)引入
為了解決這個(gè)問題块攒,有兩種開發(fā)思路哮塞,一是在引入 axios 之后,修改原型鏈算凿,二是結(jié)合 Vuex份蝴,封裝一個(gè) aciton。這里只說修改原型鏈的方式
改寫原型鏈

首先在 main.js 中引入 axios
import axios from 'axios'

這時(shí)候如果在其它的組件中氓轰,是無法使用 axios 命令的婚夫。所以我們將 axios 改寫為 Vue 的原型屬性

    Vue.prototype.$http= axios

在 main.js 中添加了這兩行代碼之后,就能直接在組件的 methods 中使用 $http命令
例如

  methods: {
    show() {
      this.$http({
        method: 'get',
        url: '/user',
        data: {
          name: 'virus'
        }
     })
  }
配置 axios

實(shí)際上只有 url 是必須的署鸡,完整的 api 可以參考https://www.kancloud.cn/yunye/axios/234845

  1. 對(duì)于get請(qǐng)求
    axios.get('/user', {
          params:{
                name:"virus"  
          }
    })
  1. 對(duì)于post請(qǐng)求
  axios.post('/user',{
      name:"virus" 
  })

3案糙、 一次性并發(fā)多個(gè)請(qǐng)求

function getUserAccount(){
  return axios.get('/user/12345');
}
function getUserPermissions(){
  return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(),getUserPermissions()])
  .then(axios.spread(function(acct,perms){
    //當(dāng)這兩個(gè)請(qǐng)求都完成的時(shí)候會(huì)觸發(fā)這個(gè)函數(shù),兩個(gè)參數(shù)分別代表返回的結(jié)果
  }))

4.axios可以通過配置(config)來發(fā)送請(qǐng)求

//發(fā)送一個(gè)`POST`請(qǐng)求
axios({
    method:"POST",
    url:'/user/1111',
    data:{
      name:"virus" 
    }
});

完整的請(qǐng)求還應(yīng)當(dāng)包括 .then 和 .catch

   .then(function(res){
          console.log(res)
        })
    .catch(function(err){
          console.log(err)
        })

當(dāng)請(qǐng)求成功時(shí)靴庆,會(huì)執(zhí)行 .then侍筛,否則執(zhí)行 .catch
這兩個(gè)回調(diào)函數(shù)都有各自獨(dú)立的作用域,如果直接在里面訪問 this撒穷,無法訪問到 Vue 實(shí)例,這時(shí)只要添加一個(gè) .bind(this) 就能解決這個(gè)問題匣椰。(如果你使用的是es6箭頭函數(shù)就不存在這樣的問題)

    .then(function(res){
          console.log(this.data)
     }.bind(this))

請(qǐng)求方式的別名,這里對(duì)所有已經(jīng)支持的請(qǐng)求方式都提供了方便的別名

axios.request(config);

axios.get(url[,config]);

axios.delete(url[,config]);

axios.head(url[,config]);

axios.post(url[,data[,config]]);

axios.put(url[,data[,config]])

axios.patch(url[,data[,config]])

有時(shí)候我們?cè)谡?qǐng)求前需要對(duì)參數(shù)進(jìn)行序列化

比如 Form Data


1546858827003.jpg
function json2query(o) {
    let ret = [];
    for (let k in o) {
      ret.push(k + '=' + o[k]);
    }
    return ret.join('&');
  }
axios({
    method: 'post',
    url: `xxx`,
    data: {
      file:'abc.xmind',
      title:'xmind'
    },
    transformRequest: [(data) =>{      //在請(qǐng)求之前對(duì)data傳參進(jìn)行格式轉(zhuǎn)換
      data = json2query(data)
      return data
    }],
    headers:{
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
  })

在做開發(fā)的時(shí)候我們可能會(huì)遇到本地模擬數(shù)據(jù)的情況端礼,這時(shí)候我們就要模擬本地?cái)?shù)據(jù)了禽笑,下面就是vue開發(fā)請(qǐng)求本地模擬數(shù)據(jù)的配置方法

//對(duì)于新版本的webpack
//修改webpack.dev.conf.js
//首先
const express = require('express')
const app = express()
var data = require('../data.json')//加載本地?cái)?shù)據(jù)文件
var apiRoutes = express.Router()
app.use('/api', apiRoutes)

//然后在devServer配置選項(xiàng)里面添加下面的代碼
before(app){
  app.get("/api/seller",(req,res)=>{
    res.json({
      data:data.seller
    })
  })
}
另外,補(bǔ)充

vue cli腳手架前端調(diào)后端數(shù)據(jù)接口時(shí)候的本地代理跨域問題蛤奥,如我在本地localhost訪問接口http://425.00.100.100:888/是要跨域的佳镜,瀏覽器的安全策略,會(huì)報(bào)錯(cuò)凡桥,在webpack配置一下proxyTable就OK了蟀伸,如下 config/index.js

dev: {
    加入以下
    proxyTable: {
      '/api': {
        target: 'http://425.0.100.100:8888/',//設(shè)置你調(diào)用的接口域名和端口號(hào) 別忘了加http
        changeOrigin: true,//如果需要跨域
        pathRewrite: {
          '^/api': '/'
                //這里理解成用面的地址,
                后面組件中我們掉接口時(shí)直接用api代替 比如我要調(diào)
                用'http://425.0.100.100:8888/user/add'缅刽,直接寫‘/api/user/add’即可
        }
      }
    },

然而在復(fù)雜的項(xiàng)目中一般會(huì)對(duì)axios做二次封裝啊掏,添加攔截器,稍后會(huì)更新二次封裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衰猛,一起剝皮案震驚了整個(gè)濱河市迟蜜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啡省,老刑警劉巖娜睛,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件髓霞,死亡現(xiàn)場離奇詭異,居然都是意外死亡畦戒,警方通過查閱死者的電腦和手機(jī)方库,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來障斋,“玉大人薪捍,你說我怎么就攤上這事∨湓” “怎么了酪穿?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晴裹。 經(jīng)常有香客問我被济,道長,這世上最難降的妖魔是什么涧团? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任只磷,我火速辦了婚禮,結(jié)果婚禮上泌绣,老公的妹妹穿的比我還像新娘钮追。我一直安慰自己,他們只是感情好阿迈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布元媚。 她就那樣靜靜地躺著,像睡著了一般苗沧。 火紅的嫁衣襯著肌膚如雪刊棕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天待逞,我揣著相機(jī)與錄音甥角,去河邊找鬼。 笑死识樱,一個(gè)胖子當(dāng)著我的面吹牛嗤无,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怜庸,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼当犯,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了休雌?” 一聲冷哼從身側(cè)響起灶壶,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杈曲,沒想到半個(gè)月后驰凛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡担扑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恰响,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涌献。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胚宦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出燕垃,到底是詐尸還是另有隱情枢劝,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布卜壕,位于F島的核電站您旁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轴捎。R本人自食惡果不足惜鹤盒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侦副。 院中可真熱鬧侦锯,春花似錦、人聲如沸秦驯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽译隘。三九已至葱蝗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間细燎,已是汗流浹背两曼。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玻驻,地道東北人悼凑。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像璧瞬,于是被迫代替她去往敵國和親户辫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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