axios http配置

axios全局配置axios.js文件 

/**
 * http配置
 */

import axios from 'axios'
// 超时时间
axios.defaults.timeout = 60000;
export default axios;

post方法封装axios.service.js

import { Vue } from 'vue-property-decorator';
import axios from './axios';
import { Canceler } from 'axios';
import $router from '@/router';

function decoratorclass(target: any) {
  //   console.log(target);
}

type Method = 'get' | 'GET' | 'delete' | 'DELETE' |
'head' | 'HEAD' | 'options' | 'OPTIONS' | 'post' |
'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'link' |
'LINK' | 'unlink' | 'UNLINK' | undefined;
export type RequestParams = { url: string; data?: any; type?: Method; notLoading?: boolean, cancel?: Function }
const BASE_URL = process.env.VUE_APP_BASE_URL; // 全局接口地址

export const Cancel: any[] = []; // 在router中,如果有路由变化,可以全部取消请求

@decoratorclass
export default class Service extends Vue {
  request(opt: RequestParams) {
    let params = {};
    if (opt.data) {
      params = opt.data;
    }
    let loading: any = null;
    if (!opt.notLoading) {
      loading = this.$layer.loading();  // 自定义方法
    }
    const types: Method = opt.type || 'post';
    return new Promise<any>((reslove, reject) => {
      axios({
        method: types,
        url: `${BASE_URL}${opt.url}`,
        [types==='get'?'params':'data']: params,
        cancelToken: new axios.CancelToken((c: Canceler) => {
          // 单个请求取消,用于方法调用的时候可以随时取消本次请求
          if(opt.cancel){
            opt.cancel(c); // 这个参数 c 就是CancelToken构造函数里面自带的取消请求的函数,这里把该函数当参数用
          }
          
          // 全局的取消事件,取消所有请求;用于路由跳转,取消所有请求;
          Cancel.push({
            url: opt.url,
            cancel: c
          });
        }),
      }).then((res) => {
        if (res.status === 200) {
          if(res.data.ResultCode === 0){
            /**
             * 401:帐号信息错误或已过期,跳转至授权页面
             * 41003:帐号信息错误或已过期,跳转至授权页面
             * 500: 系统异常,如果影响主流程跳转至错误页面
             */
            if(res.data.MsgCode === '401' || res.data.MsgCode === '41003' || res.data.MsgCode === '500'){
              $router.push({name:'Error',query:{msg: res.data.Msg}});
              return;
            } else if(res.data.MsgCode === 'WARN'){ // 警告信息,弹框提示 Data有值 正常Data 页面正常
              reslove(res.data);
            } else { // 接口校验报错,以及别的普通报错,弹出来就行
              this.$layer.toast(res.data.Msg);

              reject(res);
            }
          } else { // ResultCode != 0 的时候都算 正常情况
            reslove(res.data);
          }
        } else { // axios报错
          reject(res);
        }
      }).catch((error) => {
        console.log(error.message);
      }).finally(() => {
        for(let f = 0;f< Cancel.length;f++) {
          if(Cancel[f].url === opt.url){
            Cancel.splice(f,1);
            break;
          };
        }
        this.$layer.hide(loading); // 自定义方法
      });
    });
  }
}

export const service = new Service();

/** 举例
 * @url接口地址
 * @data参数
 * @type请求方式 选填 默认post
 * @cancel是否取消当前请求
 * @notLoading不使用默认的loading弹出层
service.request({
    url: `/Hotel/HotelDetailRoomPlanRate`,
    data:{"TripType":"0"},
    type: 'post',
    cancel: (c: Canceler) => {
      setTimeout(() => { // 条件
        c('取消HotelDetailRoomPlanRate的请求');
      },200)
    }
}).then((res) => {}).catch((res) => {});
*/

取消所有请求:

router.beforeEach((to, from, next) => {
// 如果有路由跳转的话,取消所有请求;
  if (Cancel.length) {
    Cancel.forEach(e => {
      console.log(e.url);
      e && e.cancel('cancel-all');
    })
  } 
  next()
})

 

 

axios是一个基于Promise的HTTP客户端,用于发送HTTP请求。它可以在浏览器和Node.js中使用。下面是axios的post请求配置的介绍: 1. 使用axios发送POST请求的基本语法如下: ```javascript axios.post(url, data, config) .then(response => { // 请求成功后的处理 }) .catch(error => { // 请求失败后的处理 }); ``` 其中,`url`是请求的URL地址,`data`是要发送的数据,`config`是可选的配置对象。 2. 可选的配置项包括: - `headers`:设置请求头信息,例如: ```javascript const config = { headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer token' } }; ``` - `params`:设置URL参数,例如: ```javascript const config = { params: { id: 1, name: 'example' } }; ``` - `timeout`:设置请求超时时间(毫秒),例如: ```javascript const config = { timeout: 5000 }; ``` - `responseType`:设置响应数据类型,例如: ```javascript const config = { responseType: 'json' }; ``` 3. 可以通过创建axios实例来设置默认配置,例如: ```javascript const instance = axios.create({ baseURL: 'https://api.example.com', timeout: 5000, headers: { 'Content-Type': 'application/json' } }); ``` 然后可以使用`instance.post()`方法发送POST请求。 4. 可以通过拦截器对请求和响应进行全局处理,例如: ```javascript axios.interceptors.request.use(config => { // 在发送请求之前做些什么 return config; }, error => { // 对请求错误做些什么 return Promise.reject(error); }); axios.interceptors.response.use(response => { // 对响应数据做些什么 return response; }, error => { // 对响应错误做些什么 return Promise.reject(error); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值