封装两种习惯使用request

简介: 最近在学习Vue3,现在来说一下自己的学习感受,并且分享一些小知识点。> 可能这些知识点并不是那么属于Vue3的知识范畴,但是这是我在学习过程中遇到并且记录下来的,对于我而言,是Vue3让我遇到了这些知识,哈哈哈哈,我就这么归类辣!

前言

最近在学习Vue3,现在来说一下自己的学习感受,并且分享一些小知识点。

可能这些知识点并不是那么属于Vue3的知识范畴,但是这是我在学习过程中遇到并且记录下来的,对于我而言,是Vue3让我遇到了这些知识,哈哈哈哈,我就这么归类辣!

感想

这次使用的是Vite,之前都是用的vue-cli,Vite使用起来就一个字,快!

认真的去做一个自己的全栈项目,所以能封装起来用的地方,都尽量去封起来了,减少以后的代码量。

后端使用的是koa,也是第一次自己尝试去写后端。等这个项目写完,会继续分享一些踩坑小技巧的。

开始了,奇奇怪怪的小知识

封装两种习惯使用request

我们平时封装请求的时候,一般都会结合自己习惯来封装,冷不丁换人封装的时候,使用起来就非常不舒服,我问了问我的小伙伴们,大都是习惯以下这两种方式,所以我就对axios进行了封装,使他能够满足我们的使用习惯。

this.$request({ obj })

将参数用一个对象的方式进行解构。

this.$request({
      methods: 'get',
      url: '/login',
      data:{
        name:'Ned'
      }
    }).then((res)=>{
      console.log(res)
    })

封装如下

/**
 * axios二次封装
 */
import axios from 'axios'
import config from './../config'
import router from './../router';
import { ElMessage } from 'element-plus'

const TOKEN_INVALID = 'Token认证失败,请从新登陆'
const NETWORK_ERROR = '网络请求异常,请稍后重试'

// 创建axios实例对象,添加全局配置
const service = axios.create({
     baseURL:config.baseApi,
     timeout:8000
})

// 请求拦截器
service.interceptors.request.use((req) => {
    // to do
    const headers = req.headers
    if(!headers.Authorization) headers.Authorization = 'Bear token'
    return req
})

// 响应拦截器
service.interceptors.response.use((res) => {
    // to do
    /**
     * 注意状态码一共有两个
     * 一为http状态码
     * 二为接口返回状态码
     */
    const { code, data, msg } = res.data
    if(code === 200){
        return data
    }else if(code === 40001){
        ElMessage.error(TOKEN_INVALID)
        setTimeout(() => {
            router.push('/login')
        }, 15000);
        return Promise.reject(TOKEN_INVALID)
    }else{
        ElMessage.error(msg || NETWORK_ERROR)
        return Promise.reject(msg || NETWORK_ERROR)
    }
})

/**
 * 请求核心函数
 * @param {*} options  请求配置
 */
function request(options){
    // 判断get/post
    options.method = options.method || 'get'
    // 防止有时候写了GET
    if(options.method.toLowerCase() === 'get'){
        // 如果是get就将data直接赋值给params
        // 类型转换
        options.params = options.data;
    }
    if(config.env === 'prod'){
        service.defaults.baseURL = config.baseApi
    }else{
        service.defaults.baseURL = config.mock ? config.mockApi:config.baseApi
    }
    return service(options)
}

export default request

this.$request.get/post('/api',{ obj })

将get/post用.的方式取出,一个参数是接口路径,另一个参数是数据对象。

this.$request.get('/login',{name:Ned}).then((res)=>{
      console.log(res)
    })

在上一步的封装上,支持这种习惯

增加如下:

['get','post','put','delete','patch'].forEach((item)=>{
    request[item] = (url,data,options) =>{
        return request({
            url,
            data,
            method:item,
            ...options
        })
    }
})

写在最后

要一直在路上呀!加油!

点个赞,一起努力加油吧♥

相关文章
|
6月前
|
前端开发
Axios request 封装技巧:提升代码复用和效率的步骤
在开发中,为了提高效率,通常对 Axios 进行封装,简化了请求的发送和对响应的处理。同时,统一错误处理机制有助于维护代码的清晰和一致性。本文介绍了一些高效封装 Axios 请求的方法。
Axios request 封装技巧:提升代码复用和效率的步骤
|
6月前
|
Java
看似封装,其实不止于封装?
看似封装,其实不止于封装?
67 1
|
4月前
|
存储 安全 搜索推荐
Cookie和Session的区别,99%的程序员都不知道的细节!
大家好,我是小米,在Web开发中,Cookie和Session是两种重要的状态管理工具。它们有着不同的存储位置、安全性和应用场景。本篇文章将详细解析它们的区别和应用,让你在开发过程中能够更加游刃有余。让我们一起深入了解吧!
104 1
|
4月前
|
缓存 前端开发
网页设计,若依修改06(It must be done)-----前端post请求用data传参数
网页设计,若依修改06(It must be done)-----前端post请求用data传参数
|
JSON 前端开发 API
新建一个uniapp请求,并且封装request
新建一个uniapp请求,并且封装request
40 1
|
前端开发 API
uniapp封装request请求
uniapp封装request请求
78 0
|
前端开发 Java 应用服务中间件
细谈JavaWeb中的Request和Response
request:获取请求数据 浏览器会发送HTTP请求到后台服务器[Tomcat] HTTP的请求中会包含很多请求数据[请求行+请求头+请求体] 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务
288 0
uniapp封装request请求(有需要看着改就行)
uniapp封装request请求(有需要看着改就行)
276 0
|
设计模式 中间件 PHP
外观设计模式-Laravel Request实践:优雅的设置全局变量
model层封装消费逻辑,需要区分是Android端的请求还是iOS端的请求,分别扣除不同账户的金币 要精简代码逻辑,不想需要调用的地方都一层一层的传值到消费model,这样太繁琐了。
196 0