vue-element-admin與後端互動流程(補)(跨域)
有些朋友說,一個互動過程東一下,西一下的,不知所以然,所以在此補一下vue-element-admin的整體框架結構,並細說一下互動的過程,包括跨域問題!
一:首先是整體框架結構:
├── build // 構建相關(build.js/webpack等)
├── config // 配置相關 (代理環境配置/local埠配置等等)
├── dist //打包後的dist檔案 (供釋出到線上使用)
├── src // 原始碼
│ ├── api // 所有請求
│ ├── service //請求(和api相同,我習慣寫到這裡,更語義化)
│ ├── assets // 主題 字型等靜態資源
│ ├── components // 全域性公用元件
│ ├── directive // 全域性指令
│ ├── filters // 全域性 filter
│ ├── icons // 專案所有 svg icons
│ ├── lang // 國際化 language
│ ├── mock // 專案mock 模擬資料
│ ├── router // 路由
│ ├── store // 全域性 store管理
│ ├── styles // 全域性樣式
│ ├── utils // 全域性公用方法 (可以封裝一下cookie或者request的一些函式)
│ ├── vendor // 公用vendor
│ ├── views // views 所有頁面 (一般要和api/service起名相同,方便迭代)
│ ├── App.vue // 入口頁面
│ ├── main.js // 入口檔案 載入元件 初始化等
│ └── permission.js // 許可權管理 (根據許可權配置路由)
├── static // 第三方不打包資源
│ └── Tinymce // 富文字
├── .babelrc // babel-loader 配置
├── .eslintrc.js // eslint 配置項
├── .gitignore // git 忽略項
├── .travis.yml // 自動化CI配置
├── favicon.ico // favicon圖示
├── index.html // html模板
└── package.json // package.json
ok,我想框架結構上在上面已經寫的很詳細了,下面說一下一個互動的具體實現流程吧
1.首先是在view頁面進行互動提交,這個就不多說了,頁面級的
2.點選提交後會呼叫api/service裡的請求函式
3.請求函式會呼叫之前封裝好的axsio請求函式
4.接收後端返回的response然後進行view的data渲染
下面附程式碼細說一下
// views/ceshi
<button @click="ceshia">舉例測試</button>
import { ceshi } from '@service/ceshi'
export default {
data() {
list: '',
tokon: 'suibian'
},
methods: {
ceshia() {
ceshi(this.tokon).then(res => {
this.list = res.data.list
})
}
}
}
其中的from的ceshi.js函式裡如下寫
import request from '@utils/request' //引入request中封裝的請求函式,包括請求攔截器,response,error等操作
export function ceshi(data) {
return ruquest ({
url: 'i/suibian/suibian/suibian',
method: 'post',
data
})
}
之後是呼叫utils/request,裡面這樣寫
import store form '@store' //引入vuex,因為需要在這裡根據角色獲取路由id,並在store中進行更改
// create an axios instance
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 5000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// Do something before request is sent
return config
},
error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
// respone interceptor
service.interceptors.response.use(
// response => response,
/**
* 下面的註釋為通過在response裡,自定義code來標示請求狀態
* 當code返回如下情況則說明許可權有問題,登出並返回到登入頁
* 如想通過xmlhttprequest來狀態碼標識 邏輯可寫在下面error中
* 以下程式碼均為樣例,請結合自生需求加以修改,若不需要,則可刪除
*/
response => {
const res = response.data
if (res.error_code !== 0) {
Message({
message: res.error_msg,
type: 'error',
duration: 2 * 1000
})
// 50008:非法的token; 50012:其他客戶端登入了; 50014:Token 過期了;
if (res.error_code === 10009) {
// 請自行在引入 MessageBox
// import { Message, MessageBox } from 'element-ui'
MessageBox.confirm('你已被登出,可以取消繼續留在該頁面,或者重新登入', '確定登出', {
confirmButtonText: '重新登入',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('FedLogOut').then(() => {
location.reload() // 為了重新例項化vue-router物件 避免bug
})
})
}
return Promise.reject(response.data)
} else {
return response.data
}
},
error => {
const reg = new RegExp(/504|503|500|400/)
if (reg.test(error.message) || error.message === 'Network Error') {
Message({
message: '網路斷了,請檢查網路!',
type: 'error',
duration: 5 * 1000
})
} else {
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
}
return Promise.reject(error)
}
)
下面來說一下跨域問題:利用vue-element-admin已安裝的proxy來處理
1.在config/index.js裡配置dev的proxyTable引數
proxyTable: {
'/lizi': { //這個是公共部分http://aaa.bbb.com/lizi
target: 'http://aaa.bbb.com', //真實的伺服器地址1
target: 'http://ccc.ddd.com', //真實的伺服器地址2
changeOrigin: true //開啟代理
}
},
2.在編寫請求例項的時候註釋掉BASE_API,utils/request.js
const service = axios.create({
//baseURL: process.env.BASE_API, // api的base_url
timeout: 5000 // request timeout
})
3.在api的封裝請求函式中如此寫
//封裝一個例子
export function lizi(data) {
return request({
url: '/lizi/aaa/bbb/ccc',
method: 'post',
data
})
}
備註:如果不用moke.js的話記得在main.js中把引用moke的給註釋掉
相關文章
- 後端跨域配置(通用)後端跨域
- WEB程式的前後端資料互動流程Web後端
- 跨域請求後端配置跨域後端
- java 後端 控制跨域問題Java後端跨域
- 什麼是跨域,後端工程師如何處理跨域跨域後端工程師
- 後端工程師的「跨域」之旅後端工程師跨域
- PHP前後端互動PHP後端
- vue---axios實現資料互動與跨域問題VueiOS跨域
- Python 利用三個簡易模組熟悉前後端互動流程Python後端
- API前後端互動模式API後端模式
- 關於php後端與js前端互動問題PHP後端JS前端
- 前後端分離解決跨域問題後端跨域
- 前後端分離 跨域問題解決後端跨域
- 前後端資料交換互動後端
- SSH前後端資料互動後端
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- 前後端分離下的跨域CAS請求後端跨域
- SpringBoot解決前後端跨域問題Spring Boot後端跨域
- vue請求後端資料和跨域問題Vue後端跨域
- Winform中使用HttpClient與後端api服務進行互動ORMHTTPclient後端API
- 前後端資料互動利器--Protobuf後端
- 騰訊天氣前後端互動案例後端
- 使用vue-element-admin框架從後端動態獲取選單Vue框架後端
- 解決 Laravel 5.8 前後端分離跨域問題Laravel後端跨域
- DRF跨域後端解決之django-cors-headers跨域後端DjangoCORSHeader
- 後端工程師需要了解的跨域知識後端工程師跨域
- php與ethereum客戶端互動PHP客戶端
- 封裝一個postMessage庫,進行iframe跨域互動封裝跨域
- AJAX-前後端互動的藝術後端
- 雲物件 - 重新定義前後端互動物件後端
- Node之簡單的前後端互動後端
- Http(s)與後臺互動方式HTTP
- 筆記:前端與後臺互動筆記前端
- Ajax使用jQuery與後臺互動jQuery
- SAP與Ariba在資料分析領域的互補共贏
- 移動端開發者眼中的前端開發流程變遷與前後端分離前端後端
- 手機端跨域問題跨域
- 前後端分離解決session跨域丟失問題後端Session跨域