Vue echarts模拟后端数据流程详解

 更新时间:2022年09月23日 15:46:20   作者:benlalagang  
在平常的项目中,echarts图表我们也是使用的非常多的,通常我们从后端拿到数据,需要在图表上动态的进行呈现,接下来我们就模拟从后端获取数据然后进行呈现的方法

KOA2的使用

KOA2是由Express 原班人马打造、

环境依赖 Node v7.6.0 及以上、

支持 async 和 await

洋葱模型的中间件

写响应函数(中间件)

响应函数是通过use的方式才能产生效果, 这个函数有两个参数,

ctx :上下文, 指的是请求所处于的Web容器,我们可以通过 ctx.request 拿到请求对象, 也可

以通过 ctx.response 拿到响应对象

next :内层中间件执行的入口

模拟服务器完整路径:

安装 Koa

npm init -y

这个命令可以快速的创建出 package.json 的文件, 这个文件可以维护项目中第三方包的信息

npm install koa

由于线上最新版本的 koa 就是koa2 , 所以我们并不需要执行 npm install koa2

app.js入口文件

// 服务端入口文件
// 1. 创建KOA的实例对象
const Koa = require('koa') // 引入koa
const app = new Koa() // 创建koa 实例
// 2.绑定中间件
// 第一层 响应时间的中间件
const resDuration = require('./middleware/response_duration')
app.use(resDuration)
// 第二层 设置响应头的中间件
const resHeader = require('./middleware/response_header')
app.use(resHeader)
// 第三层 处理业务逻辑的中间件
const resData = require('./middleware/response_data')
app.use(resData)
// 3.绑定端口号
app.listen(2903)
const webSocketService = require('./service/web_socket_service')
// 开启服务器的监听,监听客户端的链接
// 当某一个客户端连接成功之后,就会对这个客户端进行message 事件的监听
webSocketService.listen()

第一层记录响应时间的中间件

完成的事件减去进入时的时间

// 计算响应总耗时的中间件
module.exports = async (context,next) =>{
// 记录开始时间
  const start = Date.now()
// 让内层的中间件得到执行
  await next()
// 记录结束的时间
  const end = Date.now()
// 准备时间数据
  const  duration = end - start
// 设置响应头 X-Response-Time
  context.set('X-Response-Time',duration + 'ms')
}

第二层设置响应头的中间件

添加两个功能 解读json utf-8格式防止乱码 以及增加请求头允许跨域

// 设置响应头的中间件
module.exports = async (context,next) =>{
  // 增加响应头 解读 json文件  utf-8格式防止乱码
  const  contentType = 'application/json; charset=utf-8'
  context.set('Content-Type',contentType)
  // 下面两行增加跨域配置
  context.set('Access-Control-Allow-Origin','*')
  context.set('Access-Control-Allow-Methods','OPTIONS,GET,PUT,POST,DELETE')
  //context.response.body = '{"success":true}'
  await next()
}

第三层处理业务逻辑的中间件

引入要用的模块 fileUtils 在下面有

通过context.request.url 获取到客户端请求的地址

用 replace方法 把 api 去掉

拼接上 存放路径的位置和后缀名 在使用 __dirname 方法得到绝对路径

把这个路径作为参数 传入 fileUtils.getFileJsonData(filePath) 执行返回数据 作为响应体返回

如果响应失败 就 try catch 返回错误信息

// 处理业务逻辑的中间件 读取某个json文件的数据
// 引入 node path内置模块 用于拼接路径
const path = require('path')
// 具体处理对应文件的工具
const fileUtils = require('../utils/file_utils')
module.exports = async (context,next) => {
  // 根据url 提取关键字 再拼接绝对路径
  const url = context.request.url // /api/seller
  let filePath = url.replace('/api','')
  filePath = path.join('../data',filePath,'.json') // ../data/seller.json
  filePath = path.join(__dirname,filePath)
try {
  const ret = await fileUtils.getFileJsonData(filePath)
  context.response.body = ret
}catch (e) {
  const errMsg = {
    message:'读取文件内容失败,文件资源不存在',
    status:404
  }
  context.response.body = JSON.stringify(errMsg)
}
  //console.log(filePath)
  await next()
}

file-utils.js: 抽离出来的工具:用来读取文件内容 return 出去

// 读取文件的工具方法
const fs = require('fs') // 引入fs文件模块  fs.readFile 用来读取文件
module.exports.getFileJsonData = (filePath) =>{
return new Promise((resolve, reject) => {
  // fs.readFile 三个参数  1.文件的路径 2.文件所要读取的编码 3.promise 函数
  fs.readFile(filePath,'utf-8',(error,data)=>{
    if (error){
      // 读取文件失败
      reject(error)
    }else {
      // 读取文件成功
      resolve(data)
    }
  })
})
}

每个图表的数据都是从后端推送到前端来的 , 不过在项目的初期 , 我们会先使用 ajax 由前端主动获取数 据, 后续会使用 WebSocket 进行改造.

到此这篇关于Vue echarts模拟后端数据流程详解的文章就介绍到这了,更多相关Vue echarts模拟数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue路由切换的两种方式示例详解

    Vue路由切换的两种方式示例详解

    这篇文章主要介绍了Vue路由切换的两种方式,主要包括标签切换和js切换,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue3.0 加载json的方法(非ajax)

    vue3.0 加载json的方法(非ajax)

    这篇文章主要介绍了vue3.0 加载json的方法(非ajax),帮助大家更好的理解和学习vue,感兴趣的朋友可以了解下
    2020-10-10
  • Vue.js在使用中的一些注意知识点

    Vue.js在使用中的一些注意知识点

    这篇文章主要给大家介绍了Vue.js在使用中的一些注意知识点,文中介绍的非常详细,对大家学习或者使用Vue.js具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Element-UI清空表单及验证不生效的问题解决

    Element-UI清空表单及验证不生效的问题解决

    本文主要介绍了Element-UI清空表单及验证不生效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • vue中watch的实际开发学习笔记

    vue中watch的实际开发学习笔记

    watch是Vue实例的一个属性是用来响应数据的变化,需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的,下面这篇文章主要给大家介绍了关于vue中watch的实际开发笔记,需要的朋友可以参考下
    2022-11-11
  • 详解vue-router2.0动态路由获取参数

    详解vue-router2.0动态路由获取参数

    本篇文章主要介绍了详解vue-router2.0动态路由获取参数,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • vue项目设置活性字体过程(自适应字体大小)

    vue项目设置活性字体过程(自适应字体大小)

    这篇文章主要介绍了vue项目设置活性字体过程(自适应字体大小),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue全局挂载实现APP全局弹窗的示例代码

    vue全局挂载实现APP全局弹窗的示例代码

    本文主要介绍了vue全局挂载实现APP全局弹窗的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • vue前端获取不同客户端mac地址最详细步骤(避免踩坑)

    vue前端获取不同客户端mac地址最详细步骤(避免踩坑)

    在开发过程中,绑定账号和电脑的功能可以通过获取电脑的MAC地址实现,下面这篇文章主要介绍了vue前端获取不同客户端mac地址的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • element-ui中按需引入的实现

    element-ui中按需引入的实现

    这篇文章主要介绍了element-ui中按需引入的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论