Vuex和Axios企业级实战

前端AXIOS网络请求实战

网络请求工具的封装

import axios from 'axios'
import router from '../router'


const service = axios.create({
  baseURL:'' /*store.state.migrateInfo.region == "sh" ? process.env.VUE_APP_API_ROOT : "h1"*/,  //api的base_url
  timeout: 60000,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  responseType: 'json', // 默认的
  withCredentials: false, // 默认的
})

service.interceptors.request.use(
  config => {
    if (window['localStorage'].getItem('token') && window['localStorage'].getItem('openId')) {
      config.headers['token'] = window['localStorage'].getItem("token");
      config.headers['openId'] = window['localStorage'].getItem("openId");
    }
    return config
  },
  error => {
    return Promise.reject(error);
  }
)

service.interceptors.response.use(
  response => {
    if (response.status == 200) {
      if(response.data.code == 1001 || response.data.code == 1002 || response.data.code == 1003 || response.data.code == 1004){
        // router.replace({ name:'Login'});
        window.location.href = process.env.CMB_LOGIN;
        return Promise.reject('token invalid');
      }
        return response;

    }
  },
  error => {
    console.log('err' + error) // for debug
    return Promise.reject(error)
  }
)


export default service

API包下后端接口层封装

import fetch from "../util/fetch";

const ZH_OPEN = process.env.ZH_OPEN

export function Login(data) {
  return fetch({
    url: ZH_OPEN + 'login',
    method: 'post',
    params: data
  })
}

vuex层的封装

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
import LoginInfo from "./module/LoginInfo";

export default new Vuex.Store({

  modules: {
    LoginInfo
  }
})

然后vuex下的每一个模块

import {Login} from "../../api/login";

const LoginInfo = {
  state: {
    userInfo: {
      userName: '',
      userId: ''
    },
    authority_DOC_EDIT: false, //开发文档模块的管理权限
    authority_ANNOUNCEMENT_RELEASE: false, //消息中心管理权限
  },
  mutations: {

    SET_AUTHORITY_DOC_EDIT(state, params){
      state.authority_DOC_EDIT = params;
    },
    SET_AUTHORITY_ANNOUNCEMENT_RELEASE(state, params){
      state.authority_ANNOUNCEMENT_RELEASE = params;
    },
    SET_USER_INFO(state, params) {
      state.userName = params.userName;
      state.userId = params.userId;
    

      //浏览器会话结束时过期
      $cookies.set("userName", params.userName, 60 * 60 * 3);
      $cookies.set("userId", params.userId, 60 * 60 * 3);

      window['localStorage'].setItem('token', params.idToken)
    }
  },
  actions: {
    Login ({commit}, params) {
      return new Promise((resolve, reject) => {
        Login(params).then(response => {
          resolve(response)
        }).catch(error => {
          reject(error)
        })
      })
    },

  }
}

export default LoginInfo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值