fetch二次封装,基于公司项目

前言

如果你的公司项目中用的是fetch,那么二次封装fetch是非常有必要的,你就不用再每个组件中引入fetch,设置请求的配置,以及校验后端传回的状态码,axios中有请求、响应拦截,但可惜的是fetch并没有提供这两个拦截器,所以本文就是相当于封装fetch请求配置,以及实现拦截器功能

一、使用场景

当你需要获取后端数据时,你就可以通过fetch调用接口,获取数据

二、使用方法

准备工作,安装插件

插件信息:安装fetch和为了兼容老版本浏览器的es6语法
安装依赖包:npm i whatwg-fetch es6-promise
注意:接口请求失败时,添加了报错提示框,本文使用antd的提示框,大家可以结合自己项目的情况,而替换掉

1、fetch请求封装(utils/request.js)

// fetch请求封装
import 'whatwg-fetch'
import 'es6-promise'
// import { message } from 'antd'

/**
 * 将对象转成 a=1&b=2的形式
 * @param obj 对象
 */
function obj2String(obj, arr = [], idx = 0) {
  for (let item in obj) {
    arr[idx++] = [item, obj[item]]
  }
  return new URLSearchParams(arr).toString()
}

/**
 * 请求封装
 * @param url 请求地址
 * @param params 请求参数
 * @param method 请求方式
 */
export default ({ url, params, method = 'GET' }) => {
  return new Promise((resolve, reject) => {
    const searchStr = obj2String(params)
    let initObj = {
      method: method,
      credentials: 'include',
    }
    if (method === 'GET') {
      // GET请求,拼接url
      url += '?' + searchStr
    } else {
      // POST请求,请求配置
      initObj = {
        ...initObj,
        ...{
          headers: new Headers({
            Accept: 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded',
          }),
          body: searchStr,
        },
      }
    }
    fetch(url, initObj)
      .then((res) => res.json())
      .then((res) => {
        // const messageStr = res.message || ''
        // 响应状态码校验
        switch (res.status) {
          case 404:
          	// 报错提示框
            // message.error(messageStr)
            reject(res)
            return
        }
        resolve(res)
      })
  })
}

2、接口封装(api/index.js)

import request from '@/utils/request'

/**
 * 获取列表请求封装
 * @param {Object} 请求参数
 */
export const getList = (params) =>
  request({
    url: '/***', // 接口url
    method: 'GET',
    params,
  })

3、调用

import { getList } from '@/api'

getList().then((res) => {
  console.log('接口返回的数据==>', res)
})

三、总结

封装特点

1、低耦合:即封装了fetch返回的固定格式,又封装了接口调用
2、可读性高:功能方法单独抽离,可快速定位
3、便于维护:根据不同类型的业务需求,彼此关联度低


觉得本文写的不错的,希望点赞、收藏、加关注,每月不定期更新干货哦,谢谢您嘞!

你可能感兴趣的文章:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Vue2项目二次封装axios,可以按照以下步骤进行: 1. 安装axios:在项目根目录中运行以下命令安装axios: ``` npm install axios ``` 2. 创建封装文件:在项目的src目录下创建一个api文件夹,并在该文件夹下创建一个request.js文件(或者其他你喜欢的文件名)。 3. 在request.js文件中引入axios和Vue: ```javascript import axios from 'axios' import Vue from 'vue' ``` 4. 创建一个axios实例,并设置一些默认配置: ```javascript const instance = axios.create({ baseURL: process.env.BASE_URL, // 设置接口根路径,可以根据需要进行配置 timeout: 10000, // 设置请求超时时间,单位为毫秒 headers: { 'Content-Type': 'application/json' // 设置请求头部类型 } }) ``` 5. 添加请求拦截器,在请求发送前做一些处理,例如添加Token等: ```javascript instance.interceptors.request.use( config => { // 在请求发送前做一些处理 const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, error => { // 处理请求错误 console.error(error) return Promise.reject(error) } ) ``` 6. 添加响应拦截器,对返回的数据进行处理: ```javascript instance.interceptors.response.use( response => { // 对返回的数据进行处理 return response.data }, error => { // 处理响应错误 console.error(error) return Promise.reject(error) } ) ``` 7. 将axios实例挂载到Vue原型上,这样在组件中可以通过this.$http来访问axios实例: ```javascript Vue.prototype.$http = instance ``` 8. 在组件中使用封装的axios: ```javascript export default { methods: { fetchData() { this.$http.get('/api/data') .then(response => { // 处理返回的数据 }) .catch(error => { // 处理请求错误 }) } } } ``` 这样就完成了Vue2项目中对axios的二次封装。你可以根据项目需求自定义一些其他的配置和处理逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员良仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值