文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node.js 连接 MySql 统计组件属性的使用情况解析

2022-11-13 18:20

关注

背景

团队研发了一个 「低代码工具」,主要应用在公司的业务上,用于解决一些重复低效的工作,提高开发效率,降低开发成本。工具的页面在 相关文章 中有,在此就不贴图啦。

哪些是低效重复的工作?比如:

工具提供了什么能力?

最近工具研发也到了一个复盘总结的阶段,就想着统计下用户在使用过程中用了哪些组件,用了哪些组件的哪些属性。前面也提到,工具是通过可视化的方式来实现组件,组件属性的一个配置,配置数据是存在数据库中。需要用到 SQL语句,然后再对数据进行一个分析输出。

讲道理这应该让后端的同事来搞,但想想咱前端Node.js也可以连接数据库的嘛,只要把数据查回来,前端整理数据那不是小case嘛,那搞起。

思路

在搞一个需求之前,我的个人习惯是先捋清楚,想好了再写。不然可能掉坑里,或者走弯路。

那要实现这个需求,如何下手?我是这么做的:

那一步一步来吧……

SQL编写

这里就是用到了基本的SQL语法,连表查询,个人觉得前端的同学还是要会写简单的SQL的,比如:

由于此处涉及到多张表的关系,在此不过多介绍,直接写出来了。一共需要4个SQL语句。

查询页面节点上配置的属性

const QUERY_LAYOUT_CMPPROPS = `select xplt.CMP_CODE as code, xplt.CMP_PROPS as props  
from xp_page_layout_tree xplt 
where 
PAGE_ID in (select PAGE_ID  from xp_page) 
and 
CMP_PROPS != '{}'`

查询到的数据如下:

从图中不难看出,code 代表组件,props 代表配置的属性对象,就像下面这样:

组件配置的属性有
container{"direction":{"propDataType":"0","propValue":"horizontal"}}

查询节点事件的配置

const QUERY_LAYOUT_CMPEVENTS = `select
 xplt1.CMP_CODE as code, xplo.BIND_EVENT as props
from
 xp_page_layout_operate xplo,
 xp_page_layout_tree xplt1,
 xp_page p
where
 xplt1.PAGE_NODE_ID = xplo .BIND_PAGE_NODE_ID
 and p.PAGE_ID = xplt1.PAGE_ID
 and xplo.BIND_EVENT is not NULL
 and xplo.OPERATE_TYPE in ('1', '2')
 group by xplt1.CMP_CODE,xplo.BIND_EVENT;`

查询到的结果如下:

code代表组件,props 代表配置的事件名。

表单字段配置的属性

const QUERY_MODEL_FIELD_FORMUIPROPS = ` select
xmf.FORM_UI_TYPE as code, xmf.FORM_UI_PROPS as props
from
xp_model xm ,
xp_model_field xmf
where
xmf.MODEL_ID = xm.MODEL_ID
and xmf.FORM_UI_PROPS is not null and xmf.FORM_UI_PROPS != '{}' and xmf.FORM_UI_PROPS != 'null';`

查询结果的格式与第一个的SQL的一致,不贴图了。

查询区域表单字段配置的属性

const QUERY_MODEL_FIELD_QUERYUIPROPS = ` select
xmf.FORM_UI_TYPE as code, xmf.QUERY_UI_PROPS as props
from
xp_model xm ,
xp_model_field xmf
where
xmf.MODEL_ID = xm.MODEL_ID
and xmf.QUERY_UI_PROPS is not null and xmf.QUERY_UI_PROPS != '{}' and xmf.QUERY_UI_PROPS != 'null';`

查询结果的格式与第一个的SQL的一致,不贴图了。只需要知道有两种格式的数据,在处理数据的时候要注意。

创建SQL连接

mkdir countprops
cd countprops
npm init -y
npm i mysql
code .

借助mysql这个包来连接数据库,进行查询操作。

module.exports = {
  host: '192.168.50.49', // IP
  user: 'root', // 用户名
  password: '********', // 密码
  database: 'database', // 数据库名
  port: 3306 // 端口
}
// #!/usr/bin/env node
// 导入数据库连接信息
const connectionConfig = require('../config/index.js')
const mysql = require('mysql')
// 创建连接
const connection = mysql.createConnection(connectionConfig)
connection.connect()

执行SQL & 处理数据

这里一共有4个SQL需要执行,每个执行完了都有返回数据,返回的数据结构有两种,要分别处理,并且还要去重。 执行查询SQL的方法是:

connection.query(sql, callback(error, result){
// 回调
})

只能通过回调的方式一个一个的执行,不支持 Promise

在此通过递归来实现:

const result = {} // 放结果
const quene = [QUERY_LAYOUT_CMPPROPS, QUERY_MODEL_FIELD_FORMUIPROPS, QUERY_MODEL_FIELD_QUERYUIPROPS, QUERY_LAYOUT_CMPEVENTS] // 等待执行的SQL
function handleProps(props) { // 递归调用执行并处理返回数据
  props.forEach(prop => { // 处理数据
    const { code, props } = prop
    const propArray = []
    try {  // 这里处理返回的 props 是对象 / 字符串的情况
      const objProps = JSON.parse(props)
      propArray.push(...Object.keys(objProps))
    } catch (error) {
      propArray.push(props)
    }
    ;(result[code] || (result[code] = new Set())).add(...propArray) // 去重
  })
  const next = quene.shift() // 按顺序,一个一个的执行
  if (next) {
    connection.query(next, function (error, results, fields) {
      if (error) throw error
      handleProps(results)
    })
  } else {
    console.log(result) // 输出结果
    
    connection.end()
  }
}
handleProps([]) // 调用

输出

最终执行输出内容如下:

总结

好了,到此,这个需求就被笔者简单的实现了,个人认为实现的还算比较优雅,主要是一劳永逸了,指不定过多久又要统计一次,到时再执行一次就OK。如果我们不这样去实现,去用眼睛观察,用手去统计的话,那不得疯了啊。假如下次需要把统计数据的结果用图表可视化展示,我们只需要去构造图表的初始化数据就OK了,非常方便!其实我们工作中有很多类似的工作,都可以通过编码来实现,只要你想,就没有啥困难能挡住你。 「只要思想不滑坡,方法总比困难多???」

以上就是Node.js 连接 MySql 统计组件属性的使用情况解析的详细内容,更多关于Node.js连接MySql统计组件的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯