1. 程式人生 > 其它 >Vue專案中的介面進階使用

Vue專案中的介面進階使用

建立services資料夾

1.資料夾apis、index、request的三個檔案。

2.apis檔案放介面

export const apis = {
  checkDeviceNo: '/api/client/getEquipmentCode',//檢查裝置碼是否存在
  getSystemInfo: '/api/client/system/info',//登入二維碼
  heartbeat: '/api/client/heartbeat',//心跳檢測
  login: '/api/client/login',//輪詢登入狀態
  getUserInfo: '/api/client/user/info',//玩家資訊
  getGameInfo: '/api/client/game/info',//遊戲配置
  uploadReport: '/api/client/scores',//上報成績
  out: '/api/client/logout',//退出登入
  replace: '/api/client/replace',//更換裝置碼(免重登)
  getAdList: '/api/screen/getList',//輪播資源
  update: '/api/client/getResource',//資源更新
  iniUpdate: '/api/client/getConfiguration',//配置更新
  competitionInfo: '/api/client/game/competitionInfo',//賽事資訊
  competitionServerInfo: '/api/client/game/competitionServerInfo',//賽事伺服器資訊
  serverInfo: '/api/client/game/serverInfo'//聯機伺服器資訊 
}

  index檔案作為入口檔案

import { get, post, put, del } from './request';
import { apis } from './apis';

export {
  get, post, put, del,
  apis
}

  request檔案作為請求頭、新增請求攔截、新增響應攔截器。

import axios from 'axios';
import { ipcRenderer } from 'electron';

function baseUrl() {
  //正式: https://03simulation.lynkco.com/api
//測試:https://jinqing.zyozl.com/api return process.env.NODE_ENV === 'development' ? '/test' : 'https://jinqing.zyozl.com/api'; } // 建立 axios 例項 let service = axios; service.defaults.timeout = 60000; // service.defaults.baseURL = baseUrl; service.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';
//允許攜帶cookiewithCredentials的情況下,後端要設定Access-Control-Allow-Origin為你的源地址, //例如http://localhost:8080,不能是*,而且還要設定header(‘Access-Control-Allow-Credentials: true’), service.defaults.withCredentials = true; // 新增請求攔截器 service.interceptors.request.use( config => { if (config.method === 'post' || config.method === 'put') { if (config.data.token) { config.headers.token = config.data.token; } delete config.data.token; } else { if (config.params.token) { config.headers.token = config.params.token; } delete config.params.token; } if (config.method === 'post' || config.method === 'put') { // post、put 提交時,將物件轉換為string, 為處理Java後臺解析問題 config.data = JSON.stringify(config.data); } // 請求傳送前進行處理 return config; }, error => { // 請求錯誤處理 return Promise.reject(error); } ); // 新增響應攔截器 service.interceptors.response.use( (response) => { if (response.data.code === 0 || response.data.code === 10054) { let { data } = response; return data; } else { switch (response.data.code) { // case 10020: // case 10021: // case 401: // ipcRenderer.send('appReload'); // ipcRenderer.send('notification', '登入過期,請重新登入'); // return; default: if (response.data.msg) { ipcRenderer.send('notification', response.data.msg); } let { data } = response; return data; } } }, (error) => { let info = {}; if (!error.response) { info = { code: 500, msg: 'Network Error' }; ipcRenderer.send('notification', 'Network Error'); return; } else { ipcRenderer.send('notification', `${error.response.statusText} code:${error.response.status}`); return; } } ); /** * 建立統一封裝過的 axios 例項 * @return {AxiosInstance} */ export function get(url, params, headers) { let options = {}; if (params) { options.params = params; } if (headers) { options.headers = headers; } return service.get(baseUrl()+url, options); } export function post(url, data, headers) { let options = {}; if (headers) { options.headers = headers; } return service.post(baseUrl()+url, data, options); } export function put(url, data, headers) { let options = {}; if (headers) { options.headers = headers; } return service.put(baseUrl()+url, data, options); } export function del(url, params, headers) { let options = {}; if (params) { options.params = params; } if (headers) { options.headers = headers; } return service.delete(baseUrl()+url, options); }