首頁 web前端 js教程 vue-cli axios請求方式及跨網域處理問題

vue-cli axios請求方式及跨網域處理問題

May 28, 2018 pm 04:16 PM
axios vue-cli 處理問題

這篇文章主要介紹了vue-cli axios請求方式及跨域處理問題,文中還給大家提到了vue中axios解決跨域問題和攔截器使用,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

vue-cli axios請求方式以及跨網域處理

  • #安裝axios

##

cnpm install axios --save
登入後複製

  • 在要使用axios的檔案中引入axios

main.js文件 :import axios from 'axois'
要发送请求的文件:import axios from 'axois'
登入後複製

  • 在config/index.js檔案設定代理程式

 dev: {   
  proxyTable: {// 输入/api 让其去访问http://localhost:3000/api
   '/api':{  
     target:'http://localhost:3000'//设置调用的接口域名和端口号 ( 设置代理目标)
   },
   '/api/*':{
    target:'http://localhost:3000'
   },
  changeOrigin: true,
   pathRewrite: { //路径重写 
      '^/api': '/' //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://localhost:3002/user/add',直接写‘/api/goods/add'即可
    } 
  }
登入後複製

    試一下,跨網域成功,但是這知識開發環境(dev)中解決了跨域問題,生產環境中正真部署到伺服器上如果是非同源還是存在跨域問題。

axios請求方式

#Get請求

 // 向具有指定id的用户发出请求
  axios.get('/user?id=1001')
   .then(function (response) {
    console.log(response.data);
   }).catch(function (error) {
    console.log(error);
   });
  // 也可以通过 params 对象传递参数
  axios.get('/user', {
    params: {
     id: 1001
    }
   }).then(function (response) {//请求成功回调函数
    console.log(response);
   }).catch(function (error) {//请求失败时的回调函数
    console.log(error);
   });
登入後複製

post請求

  axios.post('/user', {
    userId: '10001' //注意post请求发送参数的方式和get请求方式是有区别的
   }).then(function (response) {
    console.log(response);
   }).catch(function (error) {
    console.log(error);
   });
登入後複製

#補充:

vue中axios解決跨域問題和攔截器使用

1.vue中axios不支援vue.use()方式聲明使用。所以有兩種方法可以解決這點:

第一種: 在main.js中引入axios,然後將其設定為vue原型鏈上的屬性,這樣在元件中就可以直接this.axios使用了

import axios from 'axios';
Vue.prototype.axios=axios;
components:
this.axios({
    url:"a.xxx",
    method:'post',
    data:{
      id:3,
      name:'jack'
    }
  })
  .then(function(res){
    console.log(res);
  })
  .catch(function(err){
    console.log(err);
  })
 }
登入後複製

這裡要注意一點,就是在axios中把請求到的資料使用this複製給data是無效的,使用箭頭函數可以解決。

1.vue cli腳手架前端調後端資料介面時候的本機代理跨網域問題,如我在本機localhost存取介面http://10.1.5.11:8080/xxx/duty?time=2017- 07-07 14:57:22',是要跨域的才可以訪問的,如果直接訪問會報XMLHTTPRequest can not load http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22'. Response to preflight request doesn't pass access control….

為什麼有跨域問題?因為這是非同源互相通訊,具體可以自己去google了解,這裡只要在webpack配置一下proxyTable就OK了,在config中找到index.js如下:

config/index.js
dev: {
  proxyTable: {
   '/api': {
    target: 'http://10.1.5.11:8080/',//设置你调用的接口域名和端口号 
    changeOrigin: true,   //跨域
    pathRewrite: {
     '^/api': '/'     //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22',直接写‘/api/xxx/duty?time=2017-07-07 14:57:22'即可
    }
   }
登入後複製

跨網域成功,但這只是開發環境(dev)中解決了跨網域問題,生產環境中真正部署到伺服器上如果是非同源還是有跨網域問題,如我們部署的伺服器連接埠是3001 ,需要前後端聯調,第一步前端我們可以分生產production和開發development兩種環境分別測試,在config/dev.env.js和prod.env.js裡也就是開發/生產環境下分別配置一下請求的位址API_HOST,開發環境中我們用上面配置的代理位址api,生產環境下用正常的介面位址,所以這樣配置,分別在

config/dev.env.jsprod .env.js兩個檔案中進行以下配置。

config/dev.env.js:
module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',//开发环境
 API_HOST:"/api/"
})
prod.env.js
module.exports = {
 NODE_ENV: '"production"',//生产环境
 API_HOST:'"http://10.1.5.11:8080/"'
}
登入後複製

當然不管是開發或生產環境都可以直接要求http://10.1.5.11:8080//。配置好之後測試時程式會自動判斷目前是開發還是生產環境,然後自動匹配API_HOST,我們在任何組件裡都能用process.env.API_HOST來使用地址如:

instance.post(process .env.API_HOST 'user/login', this.form)

然後第二步後端伺服器設定cros跨域即可,就是access-control-allow-origin:*允許所有存取的意思。綜上:開發的環境下我們前端可以自己配置個proxy代理就能跨域了,真正的生產環境下還需要後端的配合的。某大神說:此方法ie9以下不好使,如果需要相容,最好的辦法是後端在伺服器埠加個代理,效果類似開發時webpack的代理。

1.axios發送get post請求問題

 發送post請求時一般都要設定Content-Type,發送內容的類型,application/json指發送json對象但是要提前stringify一下。 application/xxxx-form指發送? a=b&c=d格式,可以用qs的方法格式化一下,qs安裝axios後會自動安裝,只需要元件裡import一下。

const postData=JSON.stringify(this.formCustomer);
'Content-Type':'application/json'}
const postData=Qs.stringify(this.formCustomer);//过滤成?&=格式
'Content-Type':'application/xxxx-form'}
登入後複製

1.攔截器的使用

 當我們造訪某個位址頁面時,有時會要求我們重新登入後再造訪該頁面,也就是身分認證失效了,如token遺失了,或是token依然存在本地,但是卻失效了,所以單單判斷本地有沒有token值不能解決問題。此時請求時伺服器回傳的是401錯誤,授權出錯,也就是沒有權利存取該頁面。

 我們可以在發送所有請求之前和操作伺服器回應資料之前對這種情況過濾。

// http request 请求拦截器,有token值则配置上token值
axios.interceptors.request.use(
  config => {
    if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
      config.headers.Authorization = token;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });
// http response 服务器响应拦截器,这里拦截401错误,并重新跳入登页重新获取token
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 这里写清除token的代码
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}  //登录成功后跳入浏览的当前页面
          })
      }
    }
    return Promise.reject(error.response.data) 
  });
登入後複製

下面看下

vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一到门槛,会报错XMLHTTPRequest can not load http://40.00.100.100:3002/. Response to preflight request doesn't

pass access control…. 为什么跨域同源非同源自己去查吧,在webpack配置一下proxyTable就OK了,如下 config/index.js

dev: {
  加入以下
  proxyTable: {
   '/api': {
    target: 'http://40.00.100.100:3002/',//设置你调用的接口域名和端口号 别忘了加http
    changeOrigin: true,
    pathRewrite: {
     '^/api': '/'
        //这里理解成用‘/api'代替target里面的地址,
        后面组件中我们掉接口时直接用api代替 比如我要调
        用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add'即可
    }
   }
  }
登入後複製

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

Ajax获取响应内容长度的方法

Ajax方式实现定期更新页面某块内容的方法

ajax读取properties资源文件数据的方法

以上是vue-cli axios請求方式及跨網域處理問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
在Vue應用程式中使用axios時出現「Uncaught (in promise) Error: Request failed with status code 500」怎麼辦? 在Vue應用程式中使用axios時出現「Uncaught (in promise) Error: Request failed with status code 500」怎麼辦? Jun 24, 2023 pm 05:33 PM

在Vue應用程式中使用axios是十分常見的,axios是一種基於Promise的HTTP客戶端,可以用於瀏覽器和Node.js。在開發過程中,有時會出現「Uncaught(inpromise)Error:Requestfailedwithstatuscode500」的錯誤提示,對於開發者來說,這個錯誤提示可能有些難以理解和解決。本文將會探討這

Vue中資料請求的選擇:Axios or Fetch? Vue中資料請求的選擇:Axios or Fetch? Jul 17, 2023 pm 06:30 PM

Vue中資料請求的選擇:AxiosorFetch?在Vue開發中,處理資料請求是一個非常常見的任務。而選擇使用哪種工具來進行資料請求,則是需要考慮的問題。在Vue中,最常見的兩種工具是Axios和Fetch。本文將會比較這兩種工具的優缺點,並給出一些範例程式碼來幫助你做出選擇。 Axios是一個基於Promise的HTTP客戶端,可以在瀏覽器和Node.

在Vue應用程式中使用axios時出現「Error: Network Error」怎麼解決? 在Vue應用程式中使用axios時出現「Error: Network Error」怎麼解決? Jun 25, 2023 am 08:27 AM

在Vue應用程式中使用axios時出現「Error:NetworkError」怎麼解決?在Vue應用程式的開發中,我們常常會使用到axios進行API的請求或資料的獲取,但是有時我們會遇到axios請求出現「Error:NetworkError」的情況,這時我們該怎麼辦呢?首先,需要了解「Error:NetworkError」是什麼意思,它通常表示網路連

在Vue應用程式中使用axios時出現「TypeError: Failed to fetch」怎麼辦? 在Vue應用程式中使用axios時出現「TypeError: Failed to fetch」怎麼辦? Jun 24, 2023 pm 11:03 PM

最近,在使用Vue應用程式開發過程中,我遇到了一個常見的問題:「TypeError:Failedtofetch」錯誤提示。這個問題出現在使用axios進行HTTP請求時,後端伺服器沒有正確回應請求時發生。這種錯誤提示通常表示請求無法到達伺服器,可能是由於網路原因或伺服器未回應造成的。出現這個錯誤提示後,我們該怎麼辦呢?以下是一些解決方法:檢查網路連接由於

高效利用Vue和Axios實現前端資料的批次處理 高效利用Vue和Axios實現前端資料的批次處理 Jul 17, 2023 pm 10:43 PM

高效利用Vue和Axios實現前端資料的批次處理在前端開發中,資料的處理是一個常見的任務。當我們需要處理大量資料時,如果沒有有效的方法,處理資料將會變得十分繁瑣和低效。 Vue是一種優秀的前端框架,而Axios是一個流行的網路請求庫,它們可以協同工作來實現前端資料的批次處理。本文將詳細介紹如何有效利用Vue和Axios來進行資料的批次處理,並提供相關的程式碼範例

在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? 在Vue應用程式中使用axios時出現「Error: timeout of xxxms exceeded」怎麼辦? Jun 24, 2023 pm 03:27 PM

在Vue應用程式中使用axios時出現「Error:timeoutofxxxmsexceeded」怎麼辦?隨著網路的快速發展,前端技術也不斷地更新迭代,Vue作為優秀的前端框架,近年來受到大家的歡迎。在Vue應用程式中,我們常常需要使用axios來進行網路請求,但是有時候會出現「Error:timeoutofxxxmsexceeded」的錯誤

Vue實作檔案上傳的完整指南(axios、element-ui) Vue實作檔案上傳的完整指南(axios、element-ui) Jun 09, 2023 pm 04:12 PM

Vue實作檔案上傳的完整指南(axios、element-ui)在現代Web應用程式中,檔案上傳已成為一項基本的功能。無論是上傳頭像、圖片、文件或視頻,我們都需要一個可靠的方法來將文件從用戶的電腦上傳到伺服器中。本文將為您提供一份詳細的指南,介紹如何使用Vue、axios和element-ui來實現檔案上傳。什麼是axiosaxios是一個基於prom

Vue和Axios實現非同步資料請求的同步化處理 Vue和Axios實現非同步資料請求的同步化處理 Jul 17, 2023 am 10:13 AM

Vue和Axios實現非同步資料請求的同步化處理引言:在現代前端開發中,由於頁面需要透過非同步資料請求來獲取資料並動態展示,因此非同步處理成為了不可避免的需求。然而,非同步資料請求往往會導致程式碼邏輯變得複雜,難以維護。在Vue框架中,搭配使用Axios函式庫可以方便地實現非同步資料請求的同步化處理,從而提高程式碼的可讀性和維護性。一、Vue簡介Vue是一款輕量級的前端框架,

See all articles