首页 > 其他分享 >axios封装+根据环境请求不同的url

axios封装+根据环境请求不同的url

时间:2023-02-02 15:25:21浏览次数:39  
标签:case axios 封装 url dev break env message

封装axios的时候,会创建一个axios实例,然后配置他的baseUrl,今天搞了好久才搞定,特来记录下

首先安装axios

npm install axios

然后新建文件夹utils,建个js文件,用来封装axios

 

 

 文件内容,只是简单封装了下,自己搭项目玩的,token什么的都没有,baseUrl,后面会讲

import axios from 'axios'

const request = axios.create({
    //根据运行环境来选择相应接口地址
    baseURL: import.meta.env.VITE_API_URL,
    timeout: 6000, //设置超时
})

/*------------- 拦截器---------*/
    // 请求拦截器
request.interceptors.request.use(function (config) {
    return config
}, function (err) {
    return Promise.reject(err)
})

    // 响应拦截器
request.interceptors.response.use((response) => {
    return response
},(error) => {
    //响应错误
    let message = ''
    if(error.response&&error.response.status){
        const status = error.response.status
        switch (status) {
            case 400:
                message = '请求错误';
                break;
            case 401:
                message = '请求错误';
                break;
            case 404:
                message = '请求地址出错';
                break;
            case 408:
                message = '请求超时';
                break;
            case 500:
                message = '服务器内部错误!';
                break;
            case 501:
                message = '服务未实现!';
                break;
            case 502:
                message = '网关错误!';
                break;
            case 503:
                message = '服务不可用!';
                break;
            case 504:
                message = '网关超时!';
                break;
            case 505:
                message = 'HTTP版本不受支持';
                break;
            default:
                message = '请求失败'
        }
        return Promise.reject(error);
    }
})

export default request

然后去写接口就行了。新建个api文件夹,在里面写接口

import request from "../utils/request";

export function getVal() {
    return request({
        url: '/api/get',
        method: 'get'
    })
}

ok,这样就封装好了,去请求下看一下

 

 

 数据成功返回,说明请求成功

 

下面讲一下根据运行环境配置url

我的项目是vite+vue3的,具体配置是这样

根目录下新建三个文件:

.env --- 全局默认配置文件,在所有的环境中被载入
.env.development --- 开发环境的配置
.env.production --- 生产环境的配置,当 build 运行会触发此文件

 全局环境 .env 文件  可以配置全局属性

# open 运行 npm run dev 时自动打开浏览器
VITE_OPEN = false

开发环境 .env.dev 文件

# 开发环境
VITE_ENV = 'development'

# 开发环境接口地址
VITE_API_URL = 'https://localhost:8081'

生产环境 .env.pro 文件

# 线上环境
VITE_ENV = 'production'

# 生产环境
VITE_NODE_FLAG = 'pro'

# 线上环境接口地址
VITE_API_URL = 'https://production/vue-next-admin-preview/'

package.json 中配置模式, 要去掉注释

"scripts": {
    "dev": "vite --mode dev", // 运行时读取 .env 和 .env.dev文件中的配置
    "pro": "vite --mode pro", // 运行时读取 .env 和 .env.pro 文件中的配置
    "build:dev": "vue-tsc --noEmit && vite build --mode dev", // npm run build:dev 打包时读取 .env 和 .env.dev文件中的配置
    "build:pro": "vue-tsc --noEmit && vite build --mode pro", // npm run build:pro 打包时读取 .env 和 .env.pro 文件中的配置
    "preview": "vite preview"
  },

 

 使用import.meta.env来获取文件中的配置

在使用axios请求接口时配置基本路径

import axios from "axios"
export const http = axios.create({
    baseURL: import.meta.env.VITE_API_URL,
    timeout: 10000,
})

这样你执行npm run dev 和npm run pro。它的baseURL就会不一样了,变成你设定的url。达到了运行不同命令,实现不同url的目的

标签:case,axios,封装,url,dev,break,env,message
From: https://www.cnblogs.com/alannero/p/17086062.html

相关文章

  • vue.js客服系统实时聊天项目开发(十七)解决url get传参后进行base64解密问题
    有些参数需要在url的GET里传递,但是为了防止特殊字符问题,我转成了base64编码。但是js进行解码的时候,总是报错:报错:Failedtoexecute'atob'on'Window':Thestringto......
  • 设计模式落地实战 | 观察者模式 | 功能性QQ机器人封装思路
     情况简介对接qq机器人,使用.Netsdk,不同群消息不同处理方式,但群消息事件要同时下发执行,各个群之间不分前后 开始封装定义一个群消息事件的数据类,存储要下发的数据p......
  • JavaScript 中URL构造函数
    前言URL对于我们开发人员来讲,应该是非常熟悉了。在对URL进行参数拼接时,我们一般都会直接进行字符串拼接或使用模版字符串,因为这样非常方便,但是我们这样其实会在不知不觉......
  • Java—成员变量与局部变量、封装
    一、成员变量与局部变量1.定义的位置不同成员变量:成员变量定义在方法外,类中;局部变量:局部变量定义在方法中。2.生命周期不同成员变......
  • C++ Day11 使用单例模式封装log4cpp
    一、实现log4cpp的封装,使其可以像printf一样使用,测试用例如下: 思路:使用可变模板参数,最终达到的效果是在使用 LogInfo、LogError、LogWarn、LogDebug时候可以传递任意类......
  • 什么是axios
    Axios是专注于网络数据请求的库。相比于原生的XMLHttpRequest对象,axios简单易用。相比于jQuery,axios更加轻量化,只专注于网络数据请求axios发起get请求的语法:......
  • 书城8 - Vue&Axios
    1.Vue{{}}-相当于innerTextv-bind:attr绑定属性值。例如,v-bind:value-绑定value值简写::valuev-model双向绑定v-model:value,简写v-modelv-if,v-......
  • 客服系统即时通讯IM开发(六)Glang Gorm 执行原生Sql语句增删改查封装库【唯一客服】网站
    在开发在线客服系统的时候,有某些地方需要使用脚本去批量执行SQL语句,这个时候就需要使用简单的执行SQL的封装函数了查询操作是使用的原生的sql库,没用Gorm,原因是Gorm的RawS......
  • curl模拟登录
    $post_data=array("username"=>"[email protected]","password"=>"yuejide198225","remember"=>0);$data=http_build_query($post_data);$ch=curl_init();curl_setop......
  • JavaScript奇技淫巧:操控URL
    JavaScript奇技淫巧:操控URL本文展示两种不常见的JS编程技巧:实现操控浏览器窗口,更改父窗口和子窗口的URL地址。修改父窗口URL当使用window.open()打开一个窗口,可以用window.......