最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中Axios配置不同的baseURL,請求不同的域名接口方式

 更新時間:2024年07月24日 09:02:59   作者:波塞西呀  
這篇文章主要介紹了Vue中Axios配置不同的baseURL,請求不同的域名接口方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

最近使用 Vue2.0開發(fā)項目,開發(fā)過程遇到一個問題,由于項目需要拆分成多個小的模塊,接口地址來源不一致。每個模塊有不同的接口地址。而模塊之間公用的接口就出現(xiàn)在同一項目請求多個接口地址問題。

于是在網(wǎng)上看了問題解決辦法,都不太實用,所以在這里記錄一下我的解決辦法,各個項目差異性導致每個項目有不同間距辦法,這里的辦法供參考。。。。

Vue2.0項目中Axios配置不同的baseURL,請求不同的域名接口

準備工作1

準備一個utls.js 文件(路徑自己存放,我放到@/config/api中)

// 導出 對應的不同接口的URL地址
const configUrl = {
  Base_store_URL: 'http://store.xxx.com', //模塊一接口地址
  Base_api2_URL: 'http://api.xxx.com', //模塊二接口地址
}
export default configUrl

準備工作2

準備一個公用的request.js文件,并導入的apiUrl.js接口路徑文件中(import request from ‘@/utils/request’)

import axios from 'axios'
import $store from '@/store'
import router from '../router'
import baseUrl from '@/config/api'
//const baseUrl = 'http://api2.65ph.com'
// const instance = axios.create({
//   // baseURL: 'http://api2.test.com',
//   timeout: 5000,
//   // withCredentials:true
// })

const defaultOpt = { login: true }
let that = this
function baseRequest (options) {
  let instance = '';
  if(!options) return false
	switch(options.urlType){
		case 'api':
	      instance = axios.create({
	        baseURL:  baseUrl.Base_store_URL,
	        timeout: 5000,
	        withCredentials:true
	      })
			break;
		default:
	      instance = axios.create({
	        baseURL:  baseUrl.Base_api2_URL,
	        timeout: 5000,
	        withCredentials:true
	      })
	}
  axios.defaults.withCredentials = true
  const token = $store.state.app.token
   // console.log(token)
  const headers = options.headers || {}
  headers['Authorization'] =  token
  // headers["Authori-zation"] = "Bearer" + token
  options.headers = headers
  // 判斷未登錄
  if (options.login && !token) {
  // qudengl
    toLogin()
    return Promise.reject({ msg: '未登錄', toLogin: true })
  }
  // console.log(options)
  return instance(options).then(res => {
    const data = res.data || {}
    if (res.status !== 200)
      return Promise.reject({ msg: "請求失敗", res, data })

    if ([410000, 410001, 410002].indexOf(data.status) !== -1) {
      // 去登錄
      toLogin()
      return Promise.reject({ msg: res.data.msg, res, data, toLogin: true })
    }else if (data.status === 200) {
      return Promise.resolve(data, res)
    } else {
      return Promise.reject({ msg: res.data.msg, res, data })
    }
  })
}

/**
 * http 請求基礎類
 * 參考文檔 https://www.kancloud.cn/yunye/axios/234845
 *
 */
const request = ["post", "put", "patch"].reduce((request, method) => {
  /**
   *
   * @param url string 接口地址
   * @param data object get參數(shù)
   * @param options object axios 配置項
   * @param urlType object axios 請求接口路徑域名區(qū)分
   * @returns {AxiosPromise}
   */
  request[method] = (url, data = {}, options = {},urlType) => {
    return baseRequest(
      Object.assign({ url, data, method ,urlType}, defaultOpt, options)
    );
  };
  return request;
}, {});

["get", "delete", "head"].forEach(method => {
  /**
   *
   * @param url string 接口地址
   * @param params object get參數(shù)
   * @param options object axios 配置項
   * @param urlType object axios 請求接口路徑域名區(qū)分
   * @returns {AxiosPromise}
   */
  request[method] = (url, params = {}, options = {}, urlType) => {
    return baseRequest(
      Object.assign({ url, params, method, urlType }, defaultOpt, options)
    );
  };
});

export default request

在接口文件中這樣傳參

import request from '@/utils/request'

export function getZbData (page) {
  return request.get('index/zbxm', {page: page}, { login: false })
}
/**
 * 文章列表
 * @returns {*}
 * api 我們判斷模塊的參數(shù)
 */
export function getArticleList(q, cid) {
  return request.get("/api/article/list/" + cid, q, { login: false },'api');
}

我們調(diào)用接口時這樣使用

import { getArticleList} from '@/api/public'
// 在methods中
// 文章列表
        get_article_list(){
            let that = this
            let q = {
                page: that.page,
                limit: that.limit
            };
            getArticleList(q,that.cid).then(res=>{
                that.$set(that,'articleList',res.data)
            })
        },

Vue3.0項目中Axios配置不同的baseURL,請求不同的域名接口

其他地方都和上述相同,只要

準備工作2

準備一個公用的request.js文件中的用法有差異

import axios from 'axios'
import { Message } from 'iview'
import { getCookies, removeCookies } from '@/libs/util'
import Setting from '@/setting'
import {toLogin} from './login'
import baseUrl from '@/config/api'
const service = axios.create({
    // baseURL: Setting.apiBaseURL,
    timeout: 10000, // 請求超時時間
    // withCredentials:true
})

// 請求攔截器
service.interceptors.request.use(
    config => {
        // console.log(config)
        // console.log('============================')
        switch(config.urlType){
            case 'api':
                config.url = baseUrl.Base_store_URL + config.url
                break;
            default:
                config.url = baseUrl.Base_api2_URL + config.url
        }
        const token = getCookies('login_status')
       
        if (token) {
            // config.headers['Authori-zation'] = token
            config.headers['Authorization'] = token
        }
        console.log(config)
        return config
    },
    error => {
        // do something with request error
        return Promise.reject(error)
    }
)
axios.defaults.withCredentials = true// 攜帶cookie
// response interceptor
service.interceptors.response.use(

    response => {
        let status = response.data ? response.data.status : 0
        const code = status
        console.log('狀態(tài)',code)
        switch (code) {
        case 200:
            return response.data
        case 400:case 400011:case 400012:
            return Promise.reject(response.data || { msg: '未知錯誤' })
        case 410000:
        case 410001:
        case 410002:
            toLogin()
            break
        default:
            break
        }
    },
    error => {
        Message.error(error.msg)
        return Promise.reject(error)
    }
)

export default service

使用時

   /**
   * 文章詳情
   * @returns {*}
   */
  export function getarticle(id) {
    return request({
        url: '/api/article/details/' + id,
        method: 'get',
        params: '',
        urlType: 'api'
    })
    // return request.get("/api/article/details/" + id, {}, { login: false },'api');
  }

總結(jié)

優(yōu)點:

1.在不同的組件調(diào)用不同的方法就可以實現(xiàn),不同的接口請求數(shù)據(jù);

2.維護接口方便,以后上線之后,把api.js中的接口全部更換成線上接口即可;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你深入理解Vue3響應式原理

    一文帶你深入理解Vue3響應式原理

    響應式就是當對象本身(對象的增刪值)或者對象屬性(重新賦值)發(fā)生變化時,將會運行一些函數(shù),最常見的就是render函數(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3響應式原理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue制作toast組件npm包示例代碼

    vue制作toast組件npm包示例代碼

    這篇文章主要介紹了vue制作一個toast組件npm包,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • vue基礎入門之vuex安裝與使用

    vue基礎入門之vuex安裝與使用

    vuex是一個專為vue.js應用程序開發(fā)的 狀態(tài)管理模式,它采用集中式存儲管理應用的所有的狀態(tài),并以相應的規(guī)則保證狀態(tài)以一種可預測的方式發(fā)生變化,這篇文章主要給大家介紹了關(guān)于vue入門之vuex安裝與使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 淺談vue-cli 3.0.x 初體驗

    淺談vue-cli 3.0.x 初體驗

    這篇文章主要介紹了淺談vue-cli 3.0.x 初體驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 在Vue應用中處理404頁面的解決方法

    在Vue應用中處理404頁面的解決方法

    在現(xiàn)代的單頁面應用(SPA)中,404錯誤是不可避免的,當用戶訪問一個無效的路由時,我們希望能夠提供一個友好的404頁面,以改善用戶體驗,在這篇博客中,我們將探討如何在Vue應用中處理404頁面,并提供示例代碼幫助你更好地理解這一過程,需要的朋友可以參考下
    2024-12-12
  • uniapp仿微信聊天界面效果實例(vue3組合式版本)

    uniapp仿微信聊天界面效果實例(vue3組合式版本)

    這篇文章主要介紹了uniapp仿微信聊天界面的相關(guān)資料,這里提及了一個時間工具包timeMethod.js,該工具包可能提供了一系列時間處理的功能,如格式化日期、計算時間差等,以便在消息格式中正確展示時間信息,使用此類工具包可以大大提高開發(fā)效率,需要的朋友可以參考下
    2024-10-10
  • Vuejs2 + Webpack框架里,模擬下載的實例講解

    Vuejs2 + Webpack框架里,模擬下載的實例講解

    今天小編就為大家分享一篇Vuejs2 + Webpack框架里,模擬下載的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 如何通過Vue3+Element?Plus自定義彈出框組件

    如何通過Vue3+Element?Plus自定義彈出框組件

    這篇文章主要給大家介紹了關(guān)于如何通過Vue3+Element?Plus自定義彈出框組件的相關(guān)資料,彈窗是前端開發(fā)中的一種常見需求,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-05-05
  • Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題

    Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題

    這篇文章主要介紹了Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue運行卡死的問題

    vue運行卡死的問題

    這篇文章主要介紹了vue運行卡死的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論

西盟| 文山县| 子长县| 木兰县| 比如县| 东丰县| 华阴市| 芒康县| 定安县| 临城县| 大化| 高碑店市| 淳安县| 闻喜县| 阳新县| 夏津县| 澄江县| 搜索| 仁化县| 洛浦县| 汝州市| 横峰县| 江华| 喀喇沁旗| 宁化县| 开封市| 慈利县| 巢湖市| 松滋市| 灵川县| 泰安市| 白河县| 云龙县| 萝北县| 巴彦县| 乡城县| 文山县| 新河县| 邢台市| 宝鸡市| 天气|