vue-axios二次封装

1.新建request.js
import axios from 'axios';
axios.defaults.baseURL = "*******Base URL*******";
export const myRequest = options => {
  if (options.method === 'get') {
    return axios({
      url: options.url,
      method: 'get',
      headers: options.headers || {},
      //params用于get请求时
      params: options.method === 'get'? options.params : {},
      //data用于post请求时
      data: options.method === 'post'? options.data : {},
      // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
      responseType: options.responseType || 'json',
      // 跨域请求时是否携带凭证
      // 在跨域请求时带上cookie,否则后端每次收到的session都不一样
      withCredentials: true,
    })
  }
  return axios({
    url: options.url,
    method: options.method || 'get',
    headers: options.headers || {},
    //params用于get请求时
    params: options.method === 'get'? options.params : {},
    //data用于post请求时
    data: options.method === 'post'? options.data : {},
    // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
    responseType: options.responseType || 'json',
    // 跨域请求时是否携带凭证
    // 在跨域请求时带上cookie,否则后端每次收到的session都不一样
    withCredentials: true,
    // `transformRequest` 允许在向服务器发送前,修改请求数据
    // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
    // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
    transformRequest: [function (data, headers) {
      let str = '';
      for (let key in data) {
        str = str + '&' +  key + '=' + data[key]
      }
      return str.substring(1, str.length);
    }],
  })
}
2.main.js中引入
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import {myRequest} from "./util/request";

Vue.config.productionTip = false;
Vue.prototype.bus = new Vue();
Vue.prototype.$myRequest = myRequest;

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

3.使用
_this.$myRequest({
	url: 'signin',
    method: 'post',
    data: {
      phone: _this.usrphone,
      userPwd: _this.usrpwd
    }
}).then(res=>{
	console.log(res);
}).catch(err=>{
    console.log(err);
})
Vue2中,对axios进行二次封装的方法如下: 1. 首先,安装axiosVueAxios依赖: ```shell npm install axios vue-axios --save ``` 2. 在main.js中导入并使用VueAxios: ```javascript import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios) ``` 3. 创建一个api.js文件,用于封装axios请求: ```javascript import axios from 'axios' // 设置axios的默认配置 axios.defaults.baseURL = 'http://api.example.com' axios.defaults.timeout = 5000 // 创建一个axios实例,并设置拦截器 const instance = axios.create({ baseURL: axios.defaults.baseURL, timeout: axios.defaults.timeout }) instance.interceptors.request.use( config => { // 在发送请求之前做些什么 return config }, error => { // 对请求错误做些什么 return Promise.reject(error) } ) instance.interceptors.response.use( response => { // 对响应数据做些什么 return response }, error => { // 对响应错误做些什么 return Promise.reject(error) } ) // 封装具体的请求方法 export const getData = params => { return instance.get('/data', { params }) } export const postData = data => { return instance.post('/data', data) } ``` 4. 在需要使用的组件中引入api.js,并通过调用封装的方法发送请求: ```javascript import { getData, postData } from './api.js' export default { methods: { fetchData() { getData({ id: 1 }) .then(response => { // 处理返回的数据 }) .catch(error => { // 处理请求失败的情况 }) }, postData() { postData({ name: 'example' }) .then(response => { // 处理返回的数据 }) .catch(error => { // 处理请求失败的情况 }) } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值