axios及api封装

1.新建request.js

import axios from 'axios'
import { Message, MessageBox } from 'element-ui'//请根据自己的情况自信修改
import store from '../store'  

// 创建axios实例
const service = axios.create({
  baseURL: process.env.BASE_API, // api 的 base_url
  /* baseURL: window.glod.baseApi, // api 的 base_url*/
  timeout: 50000 // 请求超时时间
})

// request拦截器
service.interceptors.request.use(
  config => {
    // config.headers['Content-Type'] = 'application/json'
    if (store.getters.token) {
      config.headers['Authorization'] = 'Bearer ' + store.getters.token
       // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    return config
  },
  error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
  }
)

// response 拦截器
service.interceptors.response.use(
  response => {
    /**
     * code为201-206的暂时定为正确 可结合自己业务进行修改
     */
    const res = response
    if (res.status < 200 || res.status > 299) {
      Message({
        message: res.statusText,
        type: 'error',
        duration: 5 * 1000
      })

      if (res.status === 401 || res.status === 403) {
        MessageBox.confirm(
          '你已被登出,可以取消继续留在该页面,或者重新登录',
          '确定登出',
          {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).then(() => {
          store.dispatch('oidc/signOutOidc');
        })
      }
      return Promise.reject('error')
    } else {
      return response.data
    }
  },
  error => {
    if (error.response) {
      Message({
        message: error.response.data.error.details,
        type: 'error',
        duration: 5 * 1000
      })
      console.log('err' + error.response.data) // for debug
    } else {
      Message({
        message: error.message,
        type: 'error',
        duration: 5 * 1000
      })
      console.log('err' + error.message) // for debug
    }
    return Promise.reject(error)
  }
)

export default service

2.新建api.js

import request from "@/utils/request";
import qs from 'qs'   //qs是一个增加了一些安全性的查询字符串解析和序列化字符串的库。npm install qs

const apis = {
  // get请求方式
  getConsumeByPhone(query) {
    return request({
      url: `/v1_consume/getConsumeByPhone`,
      method: "get",
      params: query
    });
  },

  // post请求方式
  addLeaveMessage(query) {
    return request({
      url: `/v2_leave/addLeaveMessage`,
      method: "post",
      data: qs.stringify(query),
    });
  },

  //delete请求方式
  deleteByIdCard(id) {
    return request({
      url: `/card/deleteById/${id.id}/${id.updater}`,
      method: "delete"
    });
  },

  //下面说说data数据上传

  //当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串
  // (name1 = value1 & name2=value2…),然后把这个字串append到url后面,用 ? 分割,加载这个
  // 新的url。

  getOpenId(query) {
    return request({
      url: `/v1_auth/getOpenId`,
      method: "post",
      data: qs.stringify(query),
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });
  },

  // data上传2
  getCode(query) {
    return request({
      headers: {
        'Content-Type': 'application/json'
      },
      url: `/v1_global/getCode`,
      method: "post",
      data: qs.stringify(query),
    });
  },
  // **当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
  // 如果没有type = file的控件,用默认的application / x - www - form - urlencoded就可以了。
  // 但是如果有type = file的话,就要用到multipart / form - data了。浏览器会把整个表单以控件
  // 为单位分割,并为每个部分加上Content - Disposition(form - data或者file), Content - Type
  //   (默认为text / plain), name(控件name)等信息,并加上分割符(boundary) 。**

  upload(query) {
    return request({
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      url: `v1_global/upload`,
      method: "post",
      data: query
    });
  },
  //  data上传4
  uploadFace(query) {
    return request({
      headers: {
        'Content-Type': 'applic/v1_pFace/uploadFace'
      },
      url: `/v1_pFace/uploadFace`,
      method: "post",
      data: query
    });
  }
}

export default apis

----------------------
// 也可以分别导出再在页面中按需引入
export function getConsumeByPhone (parameter) {
    return axios({
        url: api.list,
        method: 'get',
        params: parameter
    })
}

3.在main.js中引用

import api from './api/api'

Vue.prototype.$api = api;

4.调用

 this.$api.getConsumeByPhone('123456');

基于https://blog.csdn.net/weixin_56947857/article/details/115908520修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
axios是一个基于Promise的HTTP客户端,用于发送HTTP请求。这里是一个简单的axios API封装示例: ```javascript import axios from 'axios'; // 创建一个axios实例 const instance = axios.create({ baseURL: 'http://api.example.com', // 设置基础URL timeout: 5000, // 请求超时时间 }); // 封装get请求 export function get(url, params) { return new Promise((resolve, reject) => { instance .get(url, { params }) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } // 封装post请求 export function post(url, data) { return new Promise((resolve, reject) => { instance .post(url, data) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } ``` 这个示例中,首先通过`axios.create`方法创建了一个axios实例,可以设置一些默认的配置参数,比如baseURL和timeout。 然后,我们封装了两个常用的请求方法:`get`和`post`。在这些封装的方法中,我们通过调用axios实例的对应方法来发送请求,并返回一个Promise对象。 这样,在其他地方使用封装好的axios API时,可以更加简洁地进行请求操作。例如: ```javascript import { get, post } from './api'; get('/users', { page: 1, limit: 10 }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); post('/login', { username: 'admin', password: '123456' }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); ``` 这样做的好处是,可以在项目中统一处理请求的配置和错误处理,提高代码的可维护性和复用性。同时,也方便了后续对axios的升级和配置调整。当然,具体的封装方式还可以根据实际需要进行更多的扩展和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值