首页 > 其他分享 >axios封装

axios封装

时间:2023-05-12 17:33:59浏览次数:40  
标签:axios return service params error 封装 post response

当我们调取后端接口时,请求会有多种结果,诸如401(未登录)、403(登录过期)、404(请求地址错误)、500(服务器繁忙)等,以往我们只会打开控制台查看原因,我们可以对此进行优化,当请求接口失败时,可以给出弹窗提示知道失败原因。
项目中用到了elementui、qs,使用前需要下载

image

service文件代码

service文件是对axios请求的封装,包括请求头的设置,默认请求地址,接口失败给出弹窗提示等
点击查看代码
import axios from 'axios';
import router from '../router/index'
import { Message } from 'element-ui';
const config = {
    baseURL: "http://localhost:5000",
    timeout: 10000,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
}
const service = axios.create(config)
service.defaults.headers.post['Content-Type'] = 'application/json'; //设置post默认请求头
service.interceptors.request.use(
    config => {
        // const token = localStorage.getItem('token')
        // token && (config.headers.Authorization == token);
        return config
    },
    error => {
        return Promise.error(error)
    }
)
service.interceptors.response.use(
    response => {
        if (response.status == 200) {
            return Promise.resolve(response.data)
        } else {
            return Promise.reject(response.data)
        }
    },
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 401: //未登录
                    Message.error('用户未登录')
                    router.replace('/login')
                    break;
                case 403: //token过期
                    Message.error('登录已过期,请重新登录')
                    router.replace('/login')
                    break;
                case 404: //请求不存在
                    Message.error('请求地址错误')
                    break;
                case 500:
                    Message.error('服务器繁忙')
                default:
                    Message.error(error.response.data.message)
            }
            return Promise.reject(error.response)
        }
    }
)
export default service

request文件代码

request文件封装get、post等类型接口,当然你也可以增加其他类型接口

点击查看代码
import service from '@/api/service';
import QS from 'qs';
export function get(url, params) {
    return new Promise((resolve, reject) => {
        service.get(url, { params: params }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}
export function post(url, params) {
    return new Promise((resolve, reject) => {
        service.post(url, QS.stringify(params)).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

modules文件代码

modules文件是存放项目各个模块的接口,如有关用户、商品的接口

点击查看代码
import { get,post } from '../request'
const goods = {
    getList(params) {
        return get('/goods/list',params)
    },
    add(params) {
        return post('/goods/add',params)
    }
}
export default goods

image
image

index文件代码

index文件是自动将modules文件里的所有接口导出

点击查看代码
const api = {};
const files = require.context('./modules',false,/\.js/);
files.keys().forEach(key=>{
    api[key.replace(/(\.\/|\.js)/g,'')] = files(key).default
})
export default api

然后在main.js中把api文件中的index.js文件引入,挂载到Vue的原型上

image

最后就是使用

image

标签:axios,return,service,params,error,封装,post,response
From: https://www.cnblogs.com/accyja/p/17395796.html

相关文章

  • c# 封装sealed修饰符
    使用sealed修饰的类,标识封装类,不能被继承,如classb不能被其他类继承;classA{}sealedclassB:A{}也能用sealed修饰重写的虚方法或属性,如下所示,Y类重写了X类的虚方法,并用sealed修饰F方法,那么,Z类就无法重写F方法,所以可以阻止后代重写sealed修饰的方法和属性;classX{prot......
  • 西门子1200脉冲运动控制程序 封装好的脉冲运动控制块,直接调用就好了,能实现手动,回原点,
    西门子1200脉冲运动控制程序封装好的脉冲运动控制块,直接调用就好了,能实现手动,回原点,走绝对位置,轴的设定值,轴的实际值,轴的状态,用起来绝对方便省心,博途西门子v15以上都可以打开,ID:5510669731623904......
  • axios 发送 form-data 请求和 x-www-form-urlencoded请求以及相关问题
    问题notsupported{"msg":"Contenttype'multipart/form-data;boundary=--------------------------714795402464721152224475;charset=UTF-8'notsupported","code":500}这个是因为form-data请求没有被后端支持,联系后端确认请求格式;关......
  • vue项目中封装localStorage和sessionStorage
    1.为什么需要封装localStorage和sessionStorage?因为封装localStorage和sessionStorage可以提高程序的维护性、可重用性和扩展性,同时也可以使代码更为简单、易懂。2.以下是一个简单的代码封装示例可以新建一个utils目录文件,在该文件下新建storage.js文件进行封装//封装local......
  • Axios学习
    axios是一个类库,基于promise管理的ajax库,常用于ajax请求,常用请求方式:get一般用于获取数据、post提交数据(表单数据+文件上传)、put更新或编辑数据,所有数据推送到后端、patch更新数据,只将修改的数据推送到后端、delete删除数据axios在vue中的使用_前端报刊的博客-CSDN博客起......
  • vue2 对vxe-table组件二次封装并全局引入
    要求新组件的写法要和旧组件保持一致,那么保留原本的插槽,属性,方法写法如下,以vxe-table为例组件封装<template><vxe-gridref="vxeGrid"v-bind="$attrs"v-on="$listeners"@filter-change="filterChange"><templatev-for="slotinslots......
  • 10. 封装和解封的概念
    1.1基本概念封装python种没有像C语言那样,逗号表达式的概念,因此当你如下写的时候,它会给你封装起来所以,当你如下写的时候是同一样的东西解构a,b=1,2解释:等式右边先做,会封装成为元组(1,2),但是元组只有一个,要同时分给a和b,所以只能把它们拆开,这就叫解构注......
  • web自动化测试框架封装
    一、创建基本架构--core  #框架核心代码--logs #日志文件--report #测试报告--temps  #临时文件夹--testcase #测试用例--main.py  #框架启动入口--pytest.ini  #框架配置文件--requirements.txt  #第三方依赖清单--conftest.py  #全局夹具--R......
  • axios
    json-server​JSONServer是一个快速、零配置的基于Node.js的FakeRESTAPI服务器,用于快速原型开发和前端开发中的数据模拟。JSONServer的核心功能是提供基于RESTfulAPI的数据访问接口,它支持常用的HTTP方法,如GET、POST、PUT、DELETE等,可以方便地进行数据的增......
  • vue2+vant2+rem+axios+钉钉自动登录 h5模板
    下载代码请轻轻的点一下这里~Node版本要求VueCLI需要Node.js8.9或更高版本(推荐8.11.0+)。你可以使用nvm或nvm-windows在同一台电脑中管理多个Node版本。本示例Node.js14.17.0启动项目npminstallnpmrundev打包项目打测试包会带vconsole控制台对......