Vue+SpringBoot前后端分離中的跨域問題


在前后端分離開發中,需要前端調用后端api並進行內容顯示,如果前后端開發都在一台主機上,則會由於瀏覽器的同源策略限制,出現跨域問題(協議、域名、端口號不同等),導致不能正常調用api接口,給開發帶來不便。

封裝api請求

 1 import axios from 'axios'
 2 
 3 //axios.create創建一個axios實例,並對該實例編寫配置,后續所有通過實例發送的請求都受當前配置約束
 4 const $http = axios.create({
 5     baseURL: '',
 6     timeout: 1000,
 7     //headers: {'X-Custom-Header': 'foobar'}
 8 });
 9 
10 // 添加請求攔截器
11 $http.interceptors.request.use(function (config) {
12     // 在發送請求之前做些什么
13     return config;
14 }, function (error) {
15     // 對請求錯誤做些什么
16     return Promise.reject(error);
17 });
18 
19 // 添加響應攔截器
20 $http.interceptors.response.use(function (response) {
21     // 對響應數據做點什么
22     return response.data;   //返回響應數據的data部分
23 }, function (error) {
24     // 對響應錯誤做點什么
25     return Promise.reject(error);
26 });
27 
28 export default $http

api調用函數

1 export const getCourses = () => {
2     return $http.get('http://localhost:8080/teacher/courses')
3 }

在本例中,前端使用8081端口號,后端使用8080端口號,前端通過調用api請求數據失敗

postman測試此api接口正常

如何解決同源問題?

1、在vue根目錄下新建vue.config.js文件並進行配置

vue.config.js文件

 1 module.exports = {
 2     devServer: {
 3         host: 'localhost',        //主機號
 4         port: 8081,               //端口號
 5         open: true,               //自動打開瀏覽器
 6         proxy: {
 7             '/api': {
 8                 target: 'http://localhost:8080/',       //接口域名
 9                 changeOrigin: true,                     //是否跨域
10                 ws: true,                               //是否代理 websockets
11                 secure: true,                           //是否https接口
12                 pathRewrite: {                          //路徑重置
13                     '^/api': '/'
14                 }
15             }
16         }
17     }
18 };

2、修改api請求

api調用函數

1 export const getCourses = () => {
2     return $http.get('/api/teacher/courses')
3 }

在這里,因為vue.config.js配置了接口域名,所以此處url只需要寫余下來的部分

url完全體

1 http://localhost:8080/teacher/courses

但是這里因為運用到代理,所以在余下的部分(即'/teacher/courses')前加上'/api',組成'/api/teacher/courses'

此時跨域問題解決,前端可以從后端接口拿到數據並顯示

問題解決!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM