返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue项目中Api的组织以及返回数据处理的操作
  • 307
分享到

Vue项目中Api的组织以及返回数据处理的操作

2024-04-02 19:04:59 307人浏览 安东尼
摘要

这篇文章主要介绍“Vue项目中api的组织以及返回数据处理的操作”,在日常操作中,相信很多人在Vue项目中Api的组织以及返回数据处理的操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

这篇文章主要介绍“Vue项目api的组织以及返回数据处理的操作”,在日常操作中,相信很多人在Vue项目中Api的组织以及返回数据处理的操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue项目中Api的组织以及返回数据处理的操作”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

项目中的所有Api配置放在一个文件中,便于查找和修改,Api的版本从配置文件(config.js)中读取,采用 apiPrefix + url 的形式组成。

在配置文件中,Api 的配置采用 Http请求方式 url 的方式,默认情况下 GET 可以不写,请求方式统一采用大写形式,动态参数采用 : 占位符 的形式。

// services/api.js
export default {
 login: 'POST /login',
 loGout: '/logout',
 queryUser: '/user/:id'
}

然后需要一个方法在解析上面的Api配置

// services/index.js
import request from '../utils/request'
import api from './api'
const gen = params => {
 let url = params
 let method = 'GET'
 const paramsArr = params.split(' ')
 if (paramsArr.length === 2) {
  method = paramsArr[0]
  url = paramsArr[1]
 }
 return data => {
  return request({
   url,
   data,
   method
  })
 }
}
const apiFunc = {}
for (const key in api) {
 apiFunc[key] = gen(api[key])
}
export default apiFunc

上面代码中的 request 是封装 axiOS 后暴露出来的方法,代码如下:

// utils/request.js
import axios from 'axios'
import store from '../store'
import { apiPrefix } from './config'
import { Message, MessageBox } from 'element-ui'
let cancel
const CancelToken = axios.CancelToken
const service = axios.create({
 baseURL: apiPrefix,
 timeout: 3000,
 cancelToken: new CancelToken(c => cancel = c)
})
service.interceptors.response.use(
 response => {
  const resType = response.config.responseType
  const res = response.data
  // 二进制文件
  if (resType && resType !== 'JSON') {
   const filename = response.headers['content-disposition'].split('filename=')[1]
   return {
    filename,
    blob: res
   }
  }
  if (res.code !== 200) {
   // 登录失效
   if (res.code === 401) {
    let timer = null
    // 取消后续请求
    cancel(res.msg)
    // 更新store及localStorage状态
    store.commit('user/RESET_LOGIN_STATE', false)
    MessageBox.confirm('登录已失效,请重新登录', '提示', {
     confirmButtonText: '确定',
     showClose: false,
     showCancelButton: false,
     type: 'warning'
    }).then(() => {
     clearTimeout(timer)
     reload()
    })
    timer = setTimeout(reload, 1000)
   }
   const errMsg = res.msg || '服务器返回错误'
   popupMsg(errMsg)
   return Promise.reject(errMsg)
  }
  return res
 },
 error => {
  // 超时
  if (error.message.includes('timeout')) {
   const errMsg = '网络请求超时, 请稍后重试'
   popupMsg(errMsg)
   cancel(errMsg)
  }
 }
)
function reload() {
 window.location.href = `${window.location.origin}/#/login`
 window.location.reload()
}
function popupMsg(msg, sec = 5000) {
 Message({
  message: msg,
  type: 'error',
  duration: sec
 })
}
export default service

在封装的过程中处理了 网络请求超时 、 下载表数据时后端直接返回二进制文件的情况 、 登录失效后取消后续接口请求 。

开发后台管理系统项目时,基本都会用到Vuex。在实际的开发过程中通常会按功能进行分 module ,在 xx.vue 文件中直接通过 mapActions 来注入带副作用的方法。

// store/common.js
import service from '../services'
const actions = {
 async login(data) {
  const res = await service.login(data)
  return Promise.resolve(res)
 }
}
export default {
 namespaced: true,
 state: {},
 getters: {},
 mutations: {},
 actions
}

其实在上面的 apiFunc 方法中是可以直接调用返回结果,为什么在这里还多此一举呢?是因为有些时候一个接口的参数需要加工处理,在每个页面处理明显代码冗余,修改不方便,同时也会出现获取同样的数据但是不同的页面后端给到的是不同的接口,这里就可以做到根据参数来明确需要哪个接口。

在封装的 action 中,有些时候是不需要返回数据(Promise),因为完全可以整个页面的数据状态全部放在state中,接收到数据后直接通过 commit 一个 mutation 来修改 state ,在页面中直接把所有的数通过 mapState 或者直接 this.$store.state.xx 来访问。如果想要绑定state中的状态到 v-model ,可以在 computed 中定义 get 和 set 来实现,例如:

export default {
 computed: {
  dateType: {
   get() {
    return this.$store.state.device.dateType
   },
   set(val) {
    // 一些处理,比如根据日、周、月来动态改变`el-datep-icker`的配置
   }
  }
 }
}

在项目中不建议把页面中的所有状态全部放在vuex中处理,除了一些全局状态和一些组件之间具有联动效应的。因为在当前路由切换到其它路由, vuex中 state 的数据是没有被重置的,再切回来会发现原有的数据并没有变化等问题。而且一旦在定义 state 时嵌套太多,重置就很麻烦了。

还有一个问题在使用 echarts 时,根据一些筛选来动态改变图表绘制时,会发现从 mapState 和 getters 中并不能获取到最新的数据,还得手动写一长串的 this.$store.state.moduleA.moduleB.xxx.state ,当然我们也可以使用vuex提供的便捷映射方法 const { mapState } = createNamespacedHelper('some/nested/module') ,但是有一个问题是一旦同一个页面引用的 module 很多,就涉及到取多个不同的别名问题了。

在项目中使用方式如下:

import { mapActions } from 'vuex'
import apiFunc from '../services'

export default {
 methods: {
  ...mapActions('common', [
   'login'
  ]),
  async onLogin() {
   const params = {}
   const res = await apiFunc.login(params)
  }
 }
}

注意在使用 async/await 时如果外层的错误没有捕捉到,最好加一层 try...catch... 。

到此,关于“Vue项目中Api的组织以及返回数据处理的操作”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Vue项目中Api的组织以及返回数据处理的操作

本文链接: https://lsjlt.com/news/80165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue项目中Api的组织以及返回数据处理的操作
    这篇文章主要介绍“Vue项目中Api的组织以及返回数据处理的操作”,在日常操作中,相信很多人在Vue项目中Api的组织以及返回数据处理的操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • vue中数据劫持以及操作数组的坑有哪些
    这篇文章将为大家详细讲解有关vue中数据劫持以及操作数组的坑有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。TL;DR给data添加新属性的时候vm.$set(vm....
    99+
    2024-04-02
  • array_values()在php中返回数组的操作示例
    这篇文章给大家分享的是有关array_values()在php中返回数组的操作示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主...
    99+
    2023-06-14
  • vue项目中的数据变化被watch监听并处理
    目录vue数据变化被watch监听处理监听当前vue文件数据监听vuex中的数据如何正确使用watch监听属性变化基本用法监听object初始化变量触发监听回调vue数据变化被wat...
    99+
    2024-04-02
  • SpringBoot响应处理之以Json数据返回的实现方法
    目录一、示例代码二、返回值解析原理三、源代码分析(debug)四、内容协商机制1. 内容协商2. 内容协商原理重点源代码3. HttpMessageConverters消息转换器原理...
    99+
    2024-04-02
  • PHP项目中数据库操作的优化方法
    数据库操作优化方法:使用 prepared statements 防止 sql 注入并提高查询速度。使用缓存系统减少查询次数。创建索引提高基于特定条件的查询速度。优化查询,使用有效率的连...
    99+
    2024-05-09
    php 数据库优化 mysql redis
  • vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)
    目录vue项目中字符串换行显示处理方法踩坑记录(记得抽空瞄一眼,很重要!) vue字符串换行问题及vue路由跳转传参总结vue项目中字符串换行显示 在vue项目中,请求后端...
    99+
    2023-05-17
    vue字符串 vue字符串换行 vue字符串换行显示
  • Pandas 数据中的loc与iloc含义以及操作
            本节学习并记录pandas 的DataFrame类型的数据是怎么对列或者行进行操作的 df.loc: 语法格式是df.loc[, ],如果列不传将返回所有的行,loc操作通过索引和列的条件筛选出数据。 df.iloc: 语法...
    99+
    2023-09-30
    pandas python
  • Shell中数组以及其相关操作的详细实例
    Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。 Shell中的数组不像java/C,只能...
    99+
    2022-06-04
    shell数组定义 shell数组排序 shell数组循环
  • Python中的数组操作技巧:提高大数据处理效率。
    Python中的数组操作技巧:提高大数据处理效率 随着数据量的不断增加,大数据处理已经成为了现代计算机领域中不可避免的挑战。而在这个过程中,高效地使用数组是至关重要的。Python作为一种高级编程语言,在处理大数据时也有很多技巧和方法,接下...
    99+
    2023-09-11
    二维码 大数据 数组
  • NumPy数组操作秘籍:揭秘数据处理的奥秘
    NumPy,全称为Numerical Python,是一个强大的Python库,专门用于科学计算和数据处理。NumPy的主要数据结构是多维数组,称为ndarray。ndarray提供了高效的数组操作函数,可以快速处理大量数据。掌握Num...
    99+
    2024-02-11
    NumPy 数组 操作 数据处理 高效 分析
  • Python 中数组操作函数的注意事项及面试技巧!
    Python 中的数组操作是非常重要的,因为数组是一种常见的数据结构,它可以帮助我们存储和处理大量的数据。在 Python 中,有很多数组操作函数可以帮助我们快速地操作数组。但是,在使用这些函数时,我们也需要注意一些细节。本文将介绍 Pyt...
    99+
    2023-11-06
    函数 数组 面试
  • 如何理解Java QQ项目详细设计中的组操作模块
    这篇文章将为大家详细讲解有关如何理解Java QQ项目详细设计中的组操作模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。好长时间没发博文了,今天再写点,今天写qq软件的组操作模块,由于客户...
    99+
    2023-06-17
  • 如何在 Go 中处理大规模数据集的缓存和数组操作?
    Go 是一种高效、简洁和强大的编程语言,被广泛应用于网络编程、分布式系统、云计算等领域。在处理大规模数据集时,缓存和数组操作是 Go 中常用的技术。本文将介绍如何在 Go 中处理大规模数据集的缓存和数组操作。 缓存 缓存是一种常用的技术...
    99+
    2023-07-08
    缓存 数组 并发
  • Django 实时数据处理中,Java API 的作用和价值?
    随着数据处理需求的增加,实时数据处理已经成为了现代应用程序中必不可少的一部分。在这个过程中,Django 和 Java API 扮演着重要的角色。本文将介绍 Django 实时数据处理中 Java API 的作用和价值。 首先,我们需要了...
    99+
    2023-07-03
    api 实时 django
  • SpringBoot项目中同时操作多个数据库的实现方法
    目录一、导入相关pom文件二、application.yml配置文件编写三、数据库连接配置文件四、主启动类注解修改五、测试在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从...
    99+
    2024-04-02
  • Vue中的父子组件通讯以及使用sync同步父子组件数据
    目录前言子组件向父组件中传递数据一. 通过props从父向子组件传递函数,调用函数改变父组件数据二. 通过自定义事件从子组件向父组件中传递数据三. 通过ref属性在父组件中直接取得子...
    99+
    2024-04-02
  • 在Go语言中,如何处理不同数据类型的同步数组操作?
    在Go语言中,同步数组操作是非常常见的需求。然而,由于不同数据类型的数组在Go语言中具有不同的特性,因此不同数据类型的同步数组操作也需要采用不同的方法。 对于基本数据类型的数组,我们可以使用sync包中提供的Mutex类型来进行同步操作。M...
    99+
    2023-10-11
    数据类型 同步 数组
  • 如何在Python中处理数据库操作的问题
    如何在Python中处理数据库操作的问题Python作为一种高级编程语言,十分适用于处理数据库操作。它具有简单易用的语法和丰富的第三方库,使得开发人员能够轻松地连接、查询和修改数据库。在本文中,我们将介绍如何使用Python进行数据库操作,...
    99+
    2023-10-22
    Python 数据库操作 处理
  • Unix中的HTTP请求处理和Python的数组操作如何协同工作?
    在现代的Web应用程序中,HTTP请求处理和数据处理是两个不可分割的部分。Unix系统提供了一些强大的工具来处理HTTP请求,而Python则提供了一些强大的数组操作功能。本文将介绍如何将这两个部分协同工作,以便在Web应用程序中实现高效...
    99+
    2023-09-16
    unix http 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作