Vue封装网络请求

news/2024/7/9 23:46:28 标签: 网络, vue, js

请求成功和请求失败

请求成功之后,获取结果的成功与失败

工作中网络请求的数据有很多,所以我们需要将网络请求封装
1. 准备工作:src文件夹下创建utils文件夹,在utils文件夹下创建request.js文件

//封装网络请求
	import $axios from "axios"
	import qs from "query-string"

	// 错误信息的响应方法
	const errorHandle = (status,other) => {
    		switch(status){
        		case 400:
            	// 请求头和服务器的限制
            		console.log(" 服务器不理解请求的语法");
            		break;
        		case 401:
            		// token验证失败,用户身份验证失败
            		console.log("(未授权) 请求要求身份验证");
            		break;
        		case 403:
            		// 用户身份过期了,服务器请求限制
            		console.log("(禁止) 服务器拒绝请求");
            		break;
        		case 404:
            		// 网络请求地址错误
            		console.log("(未找到) 服务器找不到请求的网页。");
            		break;
        		default:
            		console.log(other);
            		break;
    		}
	         }


// 创建axios对象
const instance = $axios.create({
    timeout:5000  // 请求超时
})

// 全局配置
instance.defaults.baseURL = 'http://iwenwiki.com';
// instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 创建请求拦截和响应拦截操作
instance.interceptors.request.use(config =>{
        // 配置
        if(config.method === 'post'){
            config.data = qs.stringify(config.data);
        }
        return config;
    },
    error => Promise.reject(error)
)

instance.interceptors.response.use(
    // 成功 
    /**
     * 成功和失败的判断:
     *  1.请求成功和请求失败
     *  2.请求成功:结果的成功和结果的失败
     */
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    error => {
        const { response } = error; // ES6的解构赋值
        /**
         * response包含的信息:
         *  status
         *  data
         */

        // if(response){
        //     // 给出开发者具体的错误信息
        //     // errorHandle(response.status,response.data);
        //     return Promise.reject(response);
        // }else{
        //     console.log("请求中断或者断网了");
        // }

        
        if(error){
            errorHandle(error.status,error.data);
            return Promise.reject(error);
        }else{
            console.log('请求中断那或者断网');
        }
        
    }
)

export default instance;
  1. src文件夹下创建api文件夹,api文件夹下创建base.js (存储全部请求路径)
 const base = {
	baseURL : "http://xxx",
	xx : "xxx"
	}
 export default base;
  1. api文件夹下创建index.js (请求方法的统一处理 )
  import $axios from '../utils/request'
         import base from './base'
               const api = {
	       xx函数(){
	             //return  $axios.get|post(base.baseURL + base.xx)
	             return  $axios.get|post(base.baseURL + base.xx,{
	             			params
	             		})
	        	}
		}
          export default api;
  1. 组件引入并使用
    import api from '…/xxx;
    api.xx函数(无参|有参).then()…
    或者将api挂载到全局
    import api from ‘…/xxx’ ;
    Vue.prototype.$api = api ;
    this.$api.get | post(请求)

http://www.niftyadmin.cn/n/1813819.html

相关文章

Vue Router随笔

用 Vue.js Vue Router 创建单页应用,是非常简单的。 安装 :npm install --save vue-router 引入并使用:main.js文件中引入全局使用 import VueRouter from ‘vue-router’ Vue.use(VueRouter) 创建路由实例 const router new VueRouter…

C语言的inline

一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来&#xff1…

android五大布局居中对齐方式

1.LinearLayout(线性布局) 如果是要把imagebutton之类的控件居中对齐的话&#xff0c;要用android:layout_gravity 代码如下: <LinearLayoutandroid:layout_width"fill_parent"android:layout_height"wrap_content"android:orientation"horizonta…

Vue Axios请求随笔

Axios请求 Axios 是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 node.js 中。 Axios特性 1. 从浏览器中创建 XMLHttpRequests 2. 从 node.js 创建 http 请求 3. 支持 Promise API 4. 拦截请求和响应 5. 转换请求数据和响应数据 6. 取消请求 7. 自动转换 JSON …

Vuex随笔

Vuex 本质上使用Vuex的原因其实是组件之间的数据交互过于复杂&#xff0c;重点在于当组件过多时&#xff0c;数据的传递就会不可控&#xff0c;所以引入 Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。它采用集中式管理应用的所有组件的状态&#xff0c;并以相应 的规…

苹果推送APNS总结 (

开发状态服务器地址 gateway.sandbox.push.apple.com 2195产品状态服务器地址 gateway.push.apple.com 2195Development和Production两个版本对应的apns device token是不同的&#xff0c;前者是develop的mobileprovision下获取的。后者是production的mobileprovision获…

互联网广告的效果真实性

互联网广告投放的话呢&#xff0c;最常见的目的应该有两个 —— 品牌、效果&#xff08;真实的销售额、注册等等&#xff09;。* 我们姑且这么狭隘的定义其目标。*对于前者 - 品牌&#xff0c;曝光量的高低、广告媒介有效接触的时长与频率是优质有效与否的关键。由于这种Campai…

当Hashtable和HashMap添加自身时

今天在看Hashtable的toString()源码时&#xff0c;看到了其中有一个"key this"的判断&#xff0c;于是突发奇想&#xff0c;如果用Hashtable添加自身再做一些别的操作会怎样&#xff1f; ①&#xff0c;hashCode方法 先看代码&#xff1a; 1 public static void…