亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

 更新時(shí)間:2022年10月13日 11:45:58   作者:Lvzl  
這篇文章主要為大家介紹了Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

團(tuán)隊(duì)研發(fā)了一個(gè) 「低代碼工具」,主要應(yīng)用在公司的業(yè)務(wù)上,用于解決一些重復(fù)低效的工作,提高開(kāi)發(fā)效率,降低開(kāi)發(fā)成本。工具的頁(yè)面在 相關(guān)文章 中有,在此就不貼圖啦。

哪些是低效重復(fù)的工作?比如:

  • 簡(jiǎn)單的增刪改查
  • 字段與頁(yè)面的綁定,比如某些管理類型的頁(yè)面,一個(gè)表單動(dòng)不動(dòng)上百個(gè)字段,邏輯簡(jiǎn)單,但全是搬磚的活。
  • 不舉例子了,太多啦

工具提供了什么能力?

  • 快速根據(jù)數(shù)據(jù)庫(kù)表、API接口、元數(shù)據(jù)平臺(tái)接口、mock接口生成增刪改查頁(yè)面,直接就能預(yù)覽了
  • 封裝了大量的業(yè)務(wù)組件,比如 金額,百分比,千分比,數(shù)值,地址,下拉樹(shù),彈出樹(shù)……
  • 提供了可視化配置頁(yè)面的能力,拖拽組件構(gòu)建頁(yè)面,選中組件可視化配置組件的屬性,事件,代碼邏輯的編寫(xiě)
  • 快速預(yù)覽,批量生成vue文件……
  • 先說(shuō)這些吧,跟今天的主題不相關(guān),少扯點(diǎn)犢子。

最近工具研發(fā)也到了一個(gè)復(fù)盤(pán)總結(jié)的階段,就想著統(tǒng)計(jì)下用戶在使用過(guò)程中用了哪些組件,用了哪些組件的哪些屬性。前面也提到,工具是通過(guò)可視化的方式來(lái)實(shí)現(xiàn)組件,組件屬性的一個(gè)配置,配置數(shù)據(jù)是存在數(shù)據(jù)庫(kù)中。需要用到 SQL語(yǔ)句,然后再對(duì)數(shù)據(jù)進(jìn)行一個(gè)分析輸出。

講道理這應(yīng)該讓后端的同事來(lái)搞,但想想咱前端Node.js也可以連接數(shù)據(jù)庫(kù)的嘛,只要把數(shù)據(jù)查回來(lái),前端整理數(shù)據(jù)那不是小case嘛,那搞起。

思路

在搞一個(gè)需求之前,我的個(gè)人習(xí)慣是先捋清楚,想好了再寫(xiě)。不然可能掉坑里,或者走彎路。

那要實(shí)現(xiàn)這個(gè)需求,如何下手?我是這么做的:

  • 先寫(xiě)SQL啊,把統(tǒng)計(jì)的SQL編寫(xiě)好,調(diào)試通過(guò)
  • 寫(xiě)個(gè)腳本,創(chuàng)建SQL連接
  • 執(zhí)行寫(xiě)好的SQL
  • 拿到數(shù)據(jù),處理
  • 輸出數(shù)據(jù)
  • 關(guān)閉連接

那一步一步來(lái)吧……

SQL編寫(xiě)

這里就是用到了基本的SQL語(yǔ)法,連表查詢,個(gè)人覺(jué)得前端的同學(xué)還是要會(huì)寫(xiě)簡(jiǎn)單的SQL的,比如:

  • 條件查詢
  • 關(guān)聯(lián)查詢
  • 自查詢
  • 左連接,右連接
  • 分組
  • ……

由于此處涉及到多張表的關(guān)系,在此不過(guò)多介紹,直接寫(xiě)出來(lái)了。一共需要4個(gè)SQL語(yǔ)句。

查詢頁(yè)面節(jié)點(diǎn)上配置的屬性

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 != '{}'`

查詢到的數(shù)據(jù)如下:

從圖中不難看出,code 代表組件,props 代表配置的屬性對(duì)象,就像下面這樣:

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

查詢節(jié)點(diǎn)事件的配置

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;`

查詢到的結(jié)果如下:

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';`

查詢結(jié)果的格式與第一個(gè)的SQL的一致,不貼圖了。

查詢區(qū)域表單字段配置的屬性

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';`

查詢結(jié)果的格式與第一個(gè)的SQL的一致,不貼圖了。只需要知道有兩種格式的數(shù)據(jù),在處理數(shù)據(jù)的時(shí)候要注意。

創(chuàng)建SQL連接

  • 先初始化一個(gè)項(xiàng)目
mkdir countprops
cd countprops
npm init -y
npm i mysql
code .

借助mysql這個(gè)包來(lái)連接數(shù)據(jù)庫(kù),進(jìn)行查詢操作。

  • 新建config/index.js,用于配置數(shù)據(jù)庫(kù)連接信息
module.exports = {
  host: '192.168.50.49', // IP
  user: 'root', // 用戶名
  password: '********', // 密碼
  database: 'database', // 數(shù)據(jù)庫(kù)名
  port: 3306 // 端口
}
  • 新建一個(gè)index.js文件
// #!/usr/bin/env node
// 導(dǎo)入數(shù)據(jù)庫(kù)連接信息
const connectionConfig = require('../config/index.js')
const mysql = require('mysql')
// 創(chuàng)建連接
const connection = mysql.createConnection(connectionConfig)
connection.connect()

執(zhí)行SQL & 處理數(shù)據(jù)

這里一共有4個(gè)SQL需要執(zhí)行,每個(gè)執(zhí)行完了都有返回?cái)?shù)據(jù),返回的數(shù)據(jù)結(jié)構(gòu)有兩種,要分別處理,并且還要去重。 執(zhí)行查詢SQL的方法是:

connection.query(sql, callback(error, result){
// 回調(diào)
})

只能通過(guò)回調(diào)的方式一個(gè)一個(gè)的執(zhí)行,不支持 Promise。

在此通過(guò)遞歸來(lái)實(shí)現(xiàn):

const result = {} // 放結(jié)果
const quene = [QUERY_LAYOUT_CMPPROPS, QUERY_MODEL_FIELD_FORMUIPROPS, QUERY_MODEL_FIELD_QUERYUIPROPS, QUERY_LAYOUT_CMPEVENTS] // 等待執(zhí)行的SQL
function handleProps(props) { // 遞歸調(diào)用執(zhí)行并處理返回?cái)?shù)據(jù)
  props.forEach(prop => { // 處理數(shù)據(jù)
    const { code, props } = prop
    const propArray = []
    try {  // 這里處理返回的 props 是對(duì)象 / 字符串的情況
      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() // 按順序,一個(gè)一個(gè)的執(zhí)行
  if (next) {
    connection.query(next, function (error, results, fields) {
      if (error) throw error
      handleProps(results)
    })
  } else {
    console.log(result) // 輸出結(jié)果
    /**
     * 關(guān)閉連接
     */
    connection.end()
  }
}
handleProps([]) // 調(diào)用

輸出

最終執(zhí)行輸出內(nèi)容如下:

總結(jié)

好了,到此,這個(gè)需求就被筆者簡(jiǎn)單的實(shí)現(xiàn)了,個(gè)人認(rèn)為實(shí)現(xiàn)的還算比較優(yōu)雅,主要是一勞永逸了,指不定過(guò)多久又要統(tǒng)計(jì)一次,到時(shí)再執(zhí)行一次就OK。如果我們不這樣去實(shí)現(xiàn),去用眼睛觀察,用手去統(tǒng)計(jì)的話,那不得瘋了啊。假如下次需要把統(tǒng)計(jì)數(shù)據(jù)的結(jié)果用圖表可視化展示,我們只需要去構(gòu)造圖表的初始化數(shù)據(jù)就OK了,非常方便!其實(shí)我們工作中有很多類似的工作,都可以通過(guò)編碼來(lái)實(shí)現(xiàn),只要你想,就沒(méi)有啥困難能擋住你。 「只要思想不滑坡,方法總比困難多??????」

以上就是Node.js 連接 MySql 統(tǒng)計(jì)組件屬性的使用情況解析的詳細(xì)內(nèi)容,更多關(guān)于Node.js連接MySql統(tǒng)計(jì)組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs log4js 使用詳解

    nodejs log4js 使用詳解

    這篇文章主要介紹了nodejs log4js 使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • nodejs使用redis作為緩存介質(zhì)實(shí)現(xiàn)的封裝緩存類示例

    nodejs使用redis作為緩存介質(zhì)實(shí)現(xiàn)的封裝緩存類示例

    這篇文章主要介紹了nodejs使用redis作為緩存介質(zhì)實(shí)現(xiàn)的封裝緩存類,涉及nodejs操作redis進(jìn)行緩存設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Node.js中的npm單獨(dú)與批量升級(jí)依賴包的方式超詳細(xì)講解

    Node.js中的npm單獨(dú)與批量升級(jí)依賴包的方式超詳細(xì)講解

    npm outdated僅檢查所有已安裝包的依賴關(guān)系,并將當(dāng)前版本遠(yuǎn)程倉(cāng)庫(kù)中的最新版本進(jìn)行對(duì)比,不會(huì)升級(jí),這篇文章主要介紹了Node.js中的npm單獨(dú)與批量升級(jí)依賴包的方式超詳細(xì)講解,需要的朋友可以參考下
    2024-02-02
  • 在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    在node中使用jwt簽發(fā)與驗(yàn)證token的方法

    這篇文章主要介紹了在node中使用jwt簽發(fā)與驗(yàn)證token的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • nodejs實(shí)現(xiàn)大文件(在線視頻)的讀取

    nodejs實(shí)現(xiàn)大文件(在線視頻)的讀取

    這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)大文件的讀取,比如在線視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • npm dose not support Node.js v10.15.3的解決方法

    npm dose not support Node.js v10.15

    這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • NodeJS學(xué)習(xí)筆記之Http模塊

    NodeJS學(xué)習(xí)筆記之Http模塊

    這里只是熟悉nodejs中的http模塊的API,一般在開(kāi)發(fā)過(guò)程中使用的是第三方的框架,比如說(shuō)Express。其中封裝了更為簡(jiǎn)單的構(gòu)建http服務(wù)器的API。
    2015-01-01
  • nodejs實(shí)現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片

    nodejs實(shí)現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片

    這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Node.js 學(xué)習(xí)筆記之簡(jiǎn)介、安裝及配置

    Node.js 學(xué)習(xí)筆記之簡(jiǎn)介、安裝及配置

    本文是Node.js學(xué)習(xí)筆記系列文章的第一篇,主要給大家講解的是在Windows和Linux上安裝Node.js的方法。軟件安裝版本以0.12.0為例。希望大家能夠喜歡。
    2015-03-03
  • node中的session的具體使用

    node中的session的具體使用

    這篇文章主要介紹了node中的session的具體使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論