vue.cli项目封装全局axios,请求封装,封装公共的api和调用请求

vue.cli项目封装全局axios,请求封装,封装公共的api和调用请求

正文

1.vue项目的前期配置

新建vue的项目,下载axios ,并且在main.js中导入axios

npm i axios -S
//main.js
import axios from "axios"

2.配置config文件中的带地址

vuecli 3+ 新版本的代理配置 - vue.config.js文件

关于代理配置

	 devServer: {
            overlay: { // 让浏览器 overlay 同时显示警告和错误
              warnings: true,
              errors: true
            },
            host: "localhost",
            port: 8080, // 端口号
            https: false, // https:{type:Boolean}
            open: false, //配置后自动启动浏览器
            hotOnly: true, // 热更新
            // proxy: 'http://localhost:8080'   // 配置跨域处理,只有一个代理
            proxy: { //配置多个代理
                "/testIp": {
                    target: "http://197.0.0.1:8088",
                    changeOrigin: true,
                    ws: true,//websocket支持
                    secure: false,
                    pathRewrite: {
                        "^/testIp": "/"
                    }
                },
                "/elseIp": {
                    target: "http://197.0.0.2:8088",
                    changeOrigin: true,
                    //ws: true,//websocket支持
                    secure: false,
                    pathRewrite: {
                        "^/elseIp": "/"
                    }
                },
            }
        }

封装axios实例 —request.js

在项目src目录下新建utils文件夹,然后在里面新建request.js文件

// request.js
//导入axios
import axios from 'axios'
//使用element-ui Message做消息提醒
import {Message} from 'element-ui'

//1.创建新的axios 实例
const service = axios.create({
//公共接口
baseURL:process.env.BASE_API,
//超时时间,单位是ms
timeout:3*1000
})

//2.请求拦截器
service.interceptors.request.use(config=>{
//发送请求之前要做数据处理,数据转换,配置请求头,设置token,设置loading
config.data = JSON.stringify(config.data)//数据转化,也可以使用qs.stringify(区别是后台需要的数据格式)
 config.headers = {
     'Content-Type':'application/x-www-form-urlencoded' //配置请求头
   }
   //注意使用token的时候需要引入cookie方法或者本地的localStorage等方法
   const token = getCookie('名称');//使用这个方法之前,你需要首先拿到token值
   if(token){
   config.params = {'token':token}//如果要求携带在参数中
   config.headers.token = token //如果要求携带在请求头中
}
return config
},error=>{
Promise.reject(error)
}
})

//3.响应拦截器
service.interceptors.response.use(response => {
  //接收到响应数据并成功后的一些共有的处理,关闭loading等
  
  return response
}, error => {
   /***** 接收到异常响应的处理开始 *****/
  if (error && error.response) {
    // 1.公共错误处理
    // 2.根据响应码具体处理
    switch (error.response.status) {
      case 400:
        error.message = '错误请求'
        break;
      case 401:
        error.message = '未授权,请重新登录'
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误,未找到该资源'
        window.location.href = "/NotFound"
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 501:
        error.message = '网络未实现'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `连接错误${error.response.status}`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
      Message.error('服务器响应超时,请刷新当前页')
    }
    error.message('连接服务器失败')
  }

  Message.error(error.message)
  /***** 处理结束 *****/
  //如果不需要错误处理,以上的处理过程都可省略
  return Promise.resolve(error.response)
})

//4.导入文件
export default service

封装请求—http.js

在项目src目录中下的utils的文件夹中新建http.js文件

//http.js
//导入封装好的axios实例
import request from './request'
const http={
  get(url,params){
    const config={
       method :'get',
       url:url
    }
    if(params) config.params = params
    return request(config)
},
  
  post(url,params){
        const config = {
            method: 'post',
            url:url
        }
        if(params) config.data = params
        return request(config)
    },

  delete(url,params){
        const config = {
            method: 'delete',
            url:url
        }
        if(params) config.params = params
        return request(config)
    },
    
   put(url,params){
        const config = {
            method: 'put',
            url:url
        }
        if(params) config.params = params
        return request(config)
    },
}
//导出
export default http

5.正式封装API,用于发送请求—api.js

在项目src 目录下新建api文件夹,然后在其中新建api.js文件,这个文件是主要书写api封装过程

import http from '../utils/http'
let request = '/testIP/request'

//get请求
export function getListAPI(params){
   return http.get(`${request}/getForm.json`,params)

//put请求
export function putListAPI(params){
   return http.put(`${request}/putForm.json`,params)
}

//post请求
export function postListAPI(params){
   return http.post(`${request}/postForm.json`,params)
}

//delete请求
export function deleteListAPI(params){
   return http.delete(`${request}/deleteForm.json`,params)
}

如何在vue文件中使用

方法1.用到哪个api 就调用哪个接口

import {getListAPI,putListAPI,postListAPI,deleteListAPI} from '@/api/api'

methods:{
//promise 调用,链式调用,getList()括号内只接受参数
getList() {
        getListAPI().then(res => console.log(res)).catch(err => console.log(err))
      },
		//post传参
      postListAPI(formData) {
        let data = formData
        postFormAPI(data).then(res => console.log(res)).catch(err => console.log(err))
      },
      //async await同步调用
      async postForm(formData) {
        const postRes = await postFormAPI(formData)
        const putRes = await putSomeAPI({data: 'putTest'})
        const deleteRes = await deleteListAPI(formData.name)
        // 数据处理
        console.log(postRes);
        console.log(putRes);
        console.log(deleteRes);
      },
}

方法2:把所有的api全部导入,然后用哪个就调用哪个api

import api from '@/api/api'
 methods: {
     getList() {
        api.getListAPI(data).then(res => {
          //数据处理
        }).catch(err => console.log(err))
      }
    }  
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中封装API接口是一个常见的任务,因为这是在Vue应用程序中使用API的主要方式。在Vue3中,我们可以使用Axios这个工具来处理HTTP请求Axios对于Vue应用程序非常有用,并且能够轻松地编写模块化、可重用的API代码。 首先,在Vue3项目中,我们需要首先安装并引入Axios库。我们可以在Vue的main.js文件中导入Axios,然后将其安装到Vue实例中。在这个过程中,我们可以为Axios设置一些默认的配置,例如请求方式、请求url、请求超时时间等等。 接下来,我们可以在Vue的组件中定义一个API服务,并使用Axios库来进行API请求。我们可以通过封装一个统一的API服务来避免在不同的组件中重复写相同的请求代码,提高代码的封装性和重用性。可以将常用的API请求封装为方法,以便在Vue组件中轻松调用,并提供诸如请求参数、错误处理和成功处理等功能。 在Vue3中,我们可以使用Axios的拦截器来处理请求或响应数据,例如为请求添加统一的headers、过滤响应数据等等,从而提高API请求的灵活性。 最后,我们需要将API服务作为插件添加到Vue实例中,以方便在应用程序中全局使用。这是通过在Vue的main.js文件中安装一个Vue插件并将API服务作为选项导入实现的。 总的来说,在Vue3中封装API接口可以提高代码的可维护性和重用性,同时也能够使我们更容易地统一管理API请求,从而提高应用程序的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值