Axios封装、跨域解决、开发环境配置以及代理配置

vue.jpg

一、Axios封装

安装Axios
  • npm i -S axios
  • 在src下新建文件件utils->request.js


    image.png
import axios from 'axios'
// 创建axios对象
const request = axios.create({
   baseURL: '/', 
   timeout:5000  //请求超时时间
})
// 请求拦截器
request.interceptors.request.use(config=>{
   // 请求拦截
   return config
},error=>{
   // 异常
   return Promise.reject(error)
})
// 响应拦截器
request.interceptors.response.use(response=>{
   // 响应的数据  response.data
   return response
},error=>{
   // 异常
   return Promise.reject(error)
})

export default request  //导出自定义创建的axios对象

二、跨域解决

  • 在服务器端修改端口号为8001
module.exports = {
    devServer: {
        port: 8001,  //端口号
        host: 'localhost',  //主机名
        https: false,  //协议
        open: true,  //启动服务时自动打开浏览器访问
    },
    lintOnSave: false  //关闭格式检查
}
  • 客户端进行配置访问
module.exports = {
    devServer: {
        port: 8888,  //端口号
        host: 'localhost',  //主机名
        https: false,  //协议
        open: true,  //启动服务时自动打开浏览器访问
        proxy: {
            // 匹配 /dev-api 开头的请求,
            // '/dev-api': { 
            '/dev-api': {
                // 目标服务器, 代理访问到 https://localhost:8001 
                // target: 'http://localhost:8001', 
                target: 'https://localhost:8081', 
                // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据, 
                // 并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题 
                changOrigin: true, //开启代理
                pathRewrite: {
                    // 会将 /dev-api 替换为 '',也就是 /dev-api 会移除, 
                    // 如 /dev-api/db.json 代理到 https://localhost:8080/db.json 
                    // '^/dev-api': '', 
                    '/dev-api':''
                }
            }
        }
    },
    lintOnSave: false,  //关闭格式检查
    productionSourceMap: false // 打包时不会生成.map文件
}

三、最终配置结果请看图

  • 在根目录下新建两个文件,分别是开发环境和生产环境
    .env.development
    .env.production
    注意:顺序不要写乱了
.env.development下
# 使用 VUE_APP_ 开头的变量会被 webpack 自动加载 
# 接口服务地址, 以你自已的为主 
VUE_APP_SERVICE_URL = 'http://localhost:8001'
# 定义请求的基础URL, 方便跨域请求时使用
VUE_APP_BASE_API = '/dev-api'
.env.production下
# 使用 VUE_APP_ 开头的变量会被webpack自动加载
# 定义请求的基础URL,方便跨域请求时使用
VUE_APP_BASE_API = '/pro-api'
  • 在vue.config.js进行配置
module.exports = {
    devServer: {
        port: 8888,  //端口号
        host: 'localhost',  //主机名
        https: false,  //协议
        open: true,  //启动服务时自动打开浏览器访问
        proxy: {
            // 匹配 /dev-api 开头的请求,
            // '/dev-api': { 
            [process.env.VUE_APP_BASE_API]: {
                // 目标服务器, 代理访问到 https://localhost:8001 
                // target: 'http://localhost:8001', 
                target: process.env.VUE_APP_SERVICE_URL,  // 在 .env.development 中配置的 
                // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据, 
                // 并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题 
                changOrigin: true, //开启代理
                pathRewrite: {
                    // 会将 /dev-api 替换为 '',也就是 /dev-api 会移除, 
                    // 如 /dev-api/db.json 代理到 https://localhost:8080/db.json 
                    // '^/dev-api': '', 
                    ['^' + process.env.VUE_APP_BASE_API]:''
                }
            }
        }
    },
    lintOnSave: false,  //关闭格式检查
    productionSourceMap: false // 打包时不会生成.map文件
}
  • 在main.js中动态获取环境
Vue.config.productionTip = process.env.NODE_ENV === 'production';  //production生产环境  development开发环境
  • 修改 utils/request.js 文件配置: baseURL: process.env.VUE_APP_BASE_API


    image.png
import axios from 'axios'
// 创建axios对象
const request = axios.create({
    // 请求配置参考: https://github.com/axios/axios#request-config 
    // 根据不同环境设置 baseURL, 最终发送请求时的URL为: baseURL + 发送请求时写URL , 
    // 比如 get('/test'), 最终发送请求是: /dev-api/test 
    // baseURL: '/dev-api', 
    // baseURL: '/', 
    // 根目录下的 .env.development 与 .env.production 中配置 VUE_APP_BASE_API
    baseURL: process.env.VUE_APP_BASE_API,  // /dev-api/
    timeout:5000  //请求超时时间
})
// 请求拦截器
request.interceptors.request.use(config=>{
    // 请求拦截
    return config
},error=>{
    // 异常
    return Promise.reject(error)
})
// 响应拦截器
request.interceptors.response.use(response=>{
    // 响应的数据  response.data
    return response
},error=>{
    // 异常
    return Promise.reject(error)
})

export default request  //导出自定义创建的axios对象
  • 在public下创建db.json文件
[
    {"id":1,"name":"wangcai"},
    {"id":2,"name":"lisi"},
    {"id":3,"name":"zhangsan"},
    {"id":4,"name":"zhaowu"},
    {"id":5,"name":"liqiang"}
]
  • 在src下创建文件夹(src--api--db.json)
import request from '@/utils/request'
export default{
    getList(){
        const req = request({
            method:'get',
            url:'/db.json'
        })
        return req
    }
}
  • 进行测试数据
<script>
import restApi from '@/api/test'
export default {
  created() {
    this.feachData()
  },
  methods: {
    feachData(){
      restApi.getList().then(res=>{
        console.log(res.data)
      })
    }
  },
};
</script>
image.png

今天就到此为止,后期会带来更多丰富的内容,感谢支持

0.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容