vue中axios请求的封装的介绍(代码)

本篇文章给大家带来的内容是关于vue中axios请求的封装的介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、发送请求模块目录

3798923958-5c95b3cb80568_articlex.png

2、/api/url中存放的是每个模块的URL

// 商品模块 product.jsconst product = {  sku: {    list: '/product/product/speclist',    options: '/product/product/options'  }}export default product// 公用请求模块 common.jsconst common = {  region: {    provinces: '/region/region/list',    cities: '/region/region/list'  },  upload: {    image: '/product/product/upload'  }}export default common

登录后复制

发送请求的时候只需要指定key(sku/list),如:this.$ajax(‘sku/list’, param);假定axios设置的baseURL是http://prod.storm.com/api/,那么最终的请求地址:http://prod.storm.com/api/pro…

3.requireURLs.js

使用webpack提供的require.context将src/api/url下后缀为js的所有文件引入,并整理出一个对象。

let urls = {}const req = require.context('./url', false, /.js$/)const requireAll = requireContext => requireContext.keys().map(i => {  let url = requireContext(i)  Object.assign(urls, url.default)})requireAll(req)export default urls

登录后复制

整合common.js & product.js,最终得到的对象如下:

立即学习“前端免费学习笔记(深入)”;

urls = {  sku: {    list: '/product/product/speclist',    options: '/product/product/options'  },  region: {    provinces: '/region/region/list',    cities: '/region/region/list'  },  upload: {    image: '/product/product/upload'  }}

登录后复制

4.ajax.js

import axios from 'axios'import qs from 'qs'import jsd from 'js-file-download'import store from '@/store'import urlObj from './requireURLs'import { Message, MessageBox } from 'element-ui'import { getToken } from '@/utils/auth'const service = axios.create({  baseURL: `${process.env.BASE_API}/api/`, // 不同环境(dev/prod/test)使用不同的baseURL  timeout: 5000})service.interceptors.request.use(  config => {    // 上传文件时,config.data的数据类型是FormData,    // qs.stringify(FormData)的结果是空字符串,导致报出上传文件为空的错误    if (config.method === 'post' && config.data.constructor !== FormData) {      config.data = qs.stringify(config.data)    }    if (store.getters.token) {      config.headers.common['Auth-Token'] = getToken()      // Auth-Token 登录过期后,重新登录不传token      if (!config.headers.common['Auth-Token']) {        delete config.headers.common['Auth-Token']      }    }    return config  },  error => {    Promise.reject(error)  })service.interceptors.response.use(  response => {    const res = response.data    if (response.headers['content-type'].indexOf('application/vnd.ms-excel') !== -1) {      let fileName = response.headers['content-disposition'].split('=')[1]      jsd(res, fileName)      return    }    if (res.code === 0) { // 和后台约定code:0代表请求成功      return res    } else {      if (res.code === 18500) { // 和后台约定code:18500代表token未过期,但是被更新了        handleLogin('您已被登出,请重新登录')      } else if (res.code === 18501) { // 和后台约定code:18500代表token过期        handleLogin('登录已失效,请重新登录')      } else {        // 统一处理接口的报错信息,如果需要具体到页面去处理,可以和后台另外约定一个code        Message({          message: res.msg,          type: 'error',          duration: 3 * 1000        })      }      return Promise.reject(res)    }  },  error => {    console.log('err ' + error)    let data = error.response.data    Message({      message: data.msg,      type: 'error',      duration: 3 * 1000    })    return Promise.reject(data)  })const handleLogin = title => {  MessageBox.confirm(title, '提示', {    confirmButtonText: '重新登录',    showCancelButton: false,    showClose: false,    type: 'warning'  }).then(() => {    store.dispatch('FedLogout').then(() => {      location.reload()    })  })}const ajax = (path, data = {}, options = {}) => {  let url = path.indexOf('http') === -1 ? path.split('/').reduce((o, k) => {    return o[k]  }, urlObj) : path  let method = options.method || 'post'  let params = { url, method }  if (options.method === 'get') {    Object.assign(params, { params: data }, options)  } else {    Object.assign(params, { data }, options)  }  return service(params)}export default ajax

登录后复制

5.在src/plugins中创建一个ajaxPlugin.js,并在src/main.js中引用

// ajaxPlugin.jsimport ajax from '@/api/ajax'let ajaxPlugin = {}ajaxPlugin.install = Vue => {  Vue.prototype.$ajax = ajax}export default ajaxPlugin// main.jsimport ajaxPlugin from '@/plugins/ajaxPlugin'Vue.use(ajaxPlugin)

登录后复制

6.发送请求:

this.$ajax('sku/list').then(res => {})

登录后复制

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!

以上就是vue中axios请求的封装的介绍(代码)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2732083.html

(0)
上一篇 2025年3月8日 00:37:47
下一篇 2025年2月28日 07:07:49

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • promise是什么?怎么用?

    本篇文章给大家带来的内容是关于Laravel多态关联的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 promise是什么 官网解释 promise 表示一个异步操作的最终结果。 翻译  ==可以将promi…

    编程技术 2025年3月8日
    000
  • 如何更新JavaScript中的cookie?(代码示例)

    实际上,更新cookie与替换cookie略有不同,因为我们想在cookie中放入的新值在某种程度上取决于cookie是否已经存在,如果存在,则取决于它包含什么。这意味着我们需要先读取现有的cookie,然后才能为其编写替换。 需要注意的一…

    2025年3月8日
    200
  • indexedDB存储的代码示例

    本篇文章给大家带来的内容是关于indexeddb存储的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 indexedDB(浏览器本地存储数据库)IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和…

    编程技术 2025年3月8日
    200
  • apply() 和 call() 方法有什么作用?

    本篇文章给大家带来的内容是关于apply() 和 call() 方法有什么作用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 每个函数都包含两个非继承而来的方法:apply()和call()。;call与apply都属于F…

    编程技术 2025年3月8日
    200
  • Javascript分号规则的知识介绍(附示例)

    本篇文章给大家带来的内容是关于javascript分号规则的知识介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 花点时间搞清楚JS中的分号规则吧~~~不管你喜欢结尾带分号或省略分号的模式 分号允许的场景 分号…

    编程技术 2025年3月8日
    200
  • JavaScript中AMD和ES6模块导入导出的比较(代码示例)

    本篇文章给大家带来的内容是关于javascript中amd和es6模块导入导出的比较(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 我们前端在开发过程中经常会遇到导入导出功能,在导入时,有时候是require,…

    编程技术 2025年3月8日
    200
  • JavaScript中比较运算符隐式类型转换的介绍(附示例)

    本篇文章给大家带来的内容是关于javascript中比较运算符隐式类型转换的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 相信大家在代码中经常看见 ‘==’ 和 ‘===…

    编程技术 2025年3月8日
    200
  • 前端JavaScript写Excel的代码示例

    本篇文章给大家带来的内容是关于前端javascript写excel的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前端如何才能写excel,其实也是比较简单的,只是没有接触这一块,当然这边讲的只是简单的入门。这边…

    编程技术 2025年3月8日
    200
  • React Hooks中如何请求数据(详解)

    本篇文章给大家带来的内容是关于react hooks中如何请求数据(详解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 通过这个教程,我想告诉你在 React 中如何使用 state 和 effect 这两种 hooks…

    编程技术 2025年3月8日
    200
  • JavaScript中Event Loop的分析

    本篇文章给大家带来的内容是关于JavaScript中Event Loop的分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 什么是Event Loop? 官网解释 立即学习“Java免费学习笔记(深入)”; 个人理解是j…

    2025年3月8日
    200

发表回复

登录后才能评论