vue项目 axios二次封装请求,如有错误,请指点。

5 篇文章 0 订阅
3 篇文章 0 订阅

1.首先在项目上装上
npm install axios //请求
npm install qs //转义

2.在src文件夹目录下创建api文件夹(api是名称,看个人取)
3.然后创建http.js文件 如图:
在这里插入图片描述
4.在http.js文件里直接上代码了

import axios from "axios";
import qs from "qs"
 

/**
 * 根据环境变量区分接口的默认地址
 */
switch(process.env.NODE_ENV){
    case "production":  //生产环境
        axios.defaults.baseURL = "http://api.com"	//这些都是随便写的
        break;
    case "test":        //测试环境
        axios.defaults.baseURL = "http://127.0.0.1:8080"	//这些都是随便写的
        break;
    default:            //默认环境
        axios.defaults.baseURL = "http://127.0.0.1:3000";	//这些都是随便写的

}

/**
 * 设置超时时间和跨域是否允许携带凭证
 */

axios.defaults.timeout = 10000;
axios.defaults.withCredentials = true

/**
 * 设置请求头 传递数据的格式(看服务器要求什么格式,有些是json格式)
 * x-www-form-urlencoded
 * ?xxx=xxx&aaa=aaa
 */
axios.defaults.headers["content-Type"] = 'application/x-www-form-urlencoded';
axios.defaults.transformRequest = data=> qs.stringify(data);



/**
 * 设置请求拦截器
 * 过程:
 * 客户端发送请求 -> 请求拦截器  ->服务器
 * token校验(JWT) 接受服务返回的token,存到vuex/本地存储中,
 * 每一次向服务器发请求,我们应该把token带上
 */

axios.interceptors.request.use((config)=>{
    //携带上token
    let token = localStorage.getItem('token');
    token && (config.headers.Authorization = token)
    return config;
},error=>{
    return Promise.reject(error);
});


/**
 * 响应拦截器
 * 过程
 * 服务器返回学习 -> 响应拦截  -> 客户端JS获取到信息
 * 
 */

axios.interceptors.response.use(response=>{
    return response.data;
},error=>{
    // return Promise.reject(error)
    let {response} = error;

    if(response){
        // => 服务器最起码返回结果了
        switch(response.status){
            case 401:   //权限

                break;
            case 403: //服务器拒绝执行(token过去)

                break;
            case 404://找不到页面

                break
        }
    }else{
        // =>服务器连结果都没有返回 //没有网
        if(!window.navigator.onLine){
            // 断网处理:可以跳转到断网的页面 router
            return;
        }
        return Promise.reject(error);

    }
})



export default axios;	//

说明一下这一块

/**
 * 根据环境变量区分接口的默认地址
 */
switch(process.env.NODE_ENV){
    case "production":  //生产环境
        axios.defaults.baseURL = "http://api.com"	//这些都是随便写的
        break;
    case "test":        //测试环境
        axios.defaults.baseURL = "http://127.0.0.1:8080"	//这些都是随便写的
        break;
    default:            //默认环境
        axios.defaults.baseURL = "http://127.0.0.1:3000";	//这些都是随便写的

}

这一块是根据启动的时候改变或者打包的时候把IP和端口改变

具体配置在
package.json文件中:

"scripts": {
    "serve": "vue-cli-service serve",
    "server:text":"set NODE_ENV=test&&vue-cli-service serve", 
    "server:production":"set NODE_ENV=production&&vue-cli-service serve",
    "build": "vue-cli-service build"
  },

如果我在cmd 跑 npm run server:text的话,IP和端口为:http://127.0.0.1:8080

以上就是axios请求封装好了,
具体实现接口管理为:

5.在src/api文件夹里头创建api.js文件来管理模块,路径图示:
在这里插入图片描述
api.js具体代码为:

/**
 * 这里数据请求的唯一入口
 */

import index from './module/index'
import user from './module/user'

export default{
    index,
    user
}

然后在api文件夹中创建一个module文件夹管理各个模块:
在这里插入图片描述
module/index.js内容为:

import axiosHttp from '../http'

function login(){
    return axiosHttp.post('/login') //这里的  '/login'  是具体的接口后面的名称  例如:http://127.0.0.1/api/login
}

export default{
    login
}

module/user.js内容为:

import axiosHttp from '../http'

function userInfo(){
    return axiosHttp.post('/userInfo')  //这里的  '/userInfo'  是具体的接口后面的名称  例如:http://127.0.0.1/api/userInfo
}

export default{
    userInfo
}

最后把模块话的文件抛出去给mian.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import api from './api/api'		//主要是这块 主要是这块 主要是这块 

Vue.config.productionTip = false
Vue.prototype.$api = api;		//主要是这块 主要是这块 主要是这块 
new Vue({
  router,
  store,
  render: function (h) { return h(App) }
}).$mount('#app')

然后在其他vue组件随便写个按钮事件触发一下对应的api

<button @click="getUserInfoFn">测试接口1</button>
methods:{
    getUserInfoFn(){
      this.$api.user.userInfo()
    }
  }

6.运行启动查看IP和端口号:
进入该项目的文件夹中:npm run server:text 启动

点击按钮查看
在这里插入图片描述
完。

如有错误,请指点。谢谢,喜欢的就收藏,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值