最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Highcharts+NodeJS搭建數(shù)據(jù)可視化平臺(tái)示例

 更新時(shí)間:2017年01月01日 09:19:47   作者:fareise  
本篇文章主要介紹了Highcharts+NodeJS搭建數(shù)據(jù)可視化平臺(tái),詳細(xì)的介紹了使用Highcharts框架的經(jīng)驗(yàn),有興趣的可以了解一下。

前一段時(shí)間完成了一個(gè)數(shù)據(jù)可視化項(xiàng)目,由后臺(tái)NodeJS+Highcharts框架進(jìn)行搭建。下面分享一下整個(gè)開(kāi)發(fā)過(guò)程的流程,以及使用Highcharts框架的經(jīng)驗(yàn)。

一、數(shù)據(jù)的讀取

由于數(shù)據(jù)庫(kù)使用的是MySQL數(shù)據(jù)庫(kù),在NodeJS中,可以使用NodeJS中的mysql模塊進(jìn)行mysql數(shù)據(jù)庫(kù)的相關(guān)操作,通過(guò)npm安裝即可。

1.數(shù)據(jù)庫(kù)基本配置

為了方便,我們最好先進(jìn)行一個(gè)數(shù)據(jù)庫(kù)連接的基本配置,mysql模塊需要的配置信息如下:

var connection = mysql.createConnection({ 
 host   : '127.0.0.1', 
 user   : 'root', 
 password : 'root', 
 database : 'Your_Database', 
 port : 3306 
}); 

tips:當(dāng)我們?cè)诒镜亻_(kāi)發(fā)時(shí),可以先將線上數(shù)據(jù)庫(kù)中的數(shù)據(jù)拷貝一部分到本地,如利用php myadmin,然后通過(guò)讀取本地?cái)?shù)據(jù)進(jìn)行開(kāi)發(fā)。

 2.數(shù)據(jù)庫(kù)連接

我們可以設(shè)定,當(dāng)訪問(wèn)到某個(gè)url后,自動(dòng)建立mysql連接,代碼如下:

router.get('/test', function (req, res, next) { 
 var username = req.cookies.username; 
 if(typeof username === "undefined" || username != "yidianzixun@163.com"){ 
  res.redirect('/'); 
 }else{ 
  if(connection.threadId){ 
   return; 
  }else{ 
   connection.connect(function(err) { 
    if (err) { 
     console.error('error connecting: ' + err.stack); 
     return; 
    } 
    console.log('connected as id ' + connection.threadId); 
   }); 
  } 
 } 
}) 

 注意這里面的驗(yàn)證。我們這里的項(xiàng)目比較簡(jiǎn)單,僅使用cookie做身份驗(yàn)證。當(dāng)我們要建立數(shù)據(jù)庫(kù)連接時(shí),首先一定要進(jìn)行身份驗(yàn)證,否則任何人發(fā)送請(qǐng)求就都可以和我們的數(shù)據(jù)庫(kù)進(jìn)行連接了,會(huì)造成很嚴(yán)重的安全隱患。

通過(guò)調(diào)用mysql中的connect方法,進(jìn)行mysql數(shù)據(jù)庫(kù)的連接。這里注意,數(shù)據(jù)庫(kù)的連接不能并行,否則會(huì)報(bào)錯(cuò)。因此為了安全,我們首先必須要先判斷一下當(dāng)前是否已經(jīng)連接了數(shù)據(jù)庫(kù),這里可以使用connection.threadId判斷其是否定義,從而判斷其是否已經(jīng)建立連接。如果已經(jīng)建立了連接,則不要再次建立連接。

 3.執(zhí)行查詢語(yǔ)句

通過(guò)調(diào)用query()方法,即可處理語(yǔ)句查詢操作,輸入的內(nèi)容可以是任何正確的mysql查詢語(yǔ)句,也可以嵌套其他變量,最后只要拼接出一個(gè)字符串即可。實(shí)例如下:

router.post('/test', function (req, res, next) { 
 var startDate = req.body.startDate; 
 var endDate = req.body.endDate; 
 connection.query('SELECT `date`, COUNT(DISTINCT `idea_id`) AS num,  
  SUM(`view`) AS view, SUM(`click`) AS click,  
  SUM(`cost`) AS cost FROM `idea_report_all`  
  where `date` BETWEEN "' + startDate + '" AND "' + endDate +  
  '" GROUP BY `date` ORDER BY `date` ASC', function(err, rows, fields) { 
  if (err) throw err; 
  var rows = calculate(rows); 
  res.send(JSON.stringify(rows)); 
 }); 
}) 

這里我們根據(jù)獲取到的開(kāi)始日期和截止日期,拼接成一個(gè)query語(yǔ)句,查詢出我們需要的數(shù)據(jù),最后可以在回調(diào)函數(shù)中調(diào)用(rows參數(shù)),是一個(gè)數(shù)組。

 最后,將這個(gè)數(shù)據(jù)反回給前臺(tái)即可,前臺(tái)進(jìn)行數(shù)據(jù)的處理和可視化。

二、HighCharts使用

Highcharts的使用可以在官方API上查看各個(gè)方法,而且有在線演示,非常方便(推薦Highcharts中文網(wǎng))。其中最麻煩的就是要繪制的圖表的配置項(xiàng)所需要的各個(gè)參數(shù)所組成的對(duì)象。建議設(shè)定一個(gè)構(gòu)造這個(gè)對(duì)象的構(gòu)造器,根據(jù)傳入的各個(gè)參數(shù)構(gòu)造出對(duì)應(yīng)需要的HighCharts配置項(xiàng)。因?yàn)閭魅氲膮?shù)過(guò)多,我們要使用對(duì)象的形式進(jìn)行構(gòu)建。關(guān)于HighCharts框架的更多使用,將在以后博客中更新,可以先看一下下面這個(gè)構(gòu)造的例子。

function greateOptions (id, text, xAxisTitle, date, yAxisTitle1, yAxisTitle2, k1,unit1, k2,unit2, series, color, tooltip) { 
  var data = new Object(); 
  data.chart = { 
    renderTo: id, 
  marginLeft: 50, 
  marginTop: 70 
  }; 
 data.colors = color; 
  data.title = { 
    text: text, 
    align: "left" 
  }; 
 data.tooltip = { 
  crosshairs: true, 
  shared: true, 
  useHTML: true, 
  style: { 
   padding: 10 
  }, 
  headerFormat: '<table><tr><td>' + tooltip + ':</td><td>{point.key}</td></tr>', 
  pointFormat: '<tr><td style="color: {series.color}">{series.name}: </td>' + 
         '<td style="text-align: left"><b>{point.y}</b></td></tr>', 
  footerFormat: '</table>' 
 }; 
 data.noData = { 
  style: { 
   fontWeight: 'bold', 
   fontSize: '15px', 
   color: '#303030' 
  } 
 }; 
 data.lang = { 
  noData: "正在為您加載數(shù)據(jù)......" 
 }; 
 data.credits = { 
  enabled: false 
 }; 
  data.xAxis = { 
    tickPosition: 'outside', 
  title : { 
    text: xAxisTitle || '' 
  }, 
  categories: date 
  }; 
  data.yAxis = [{ 
    lineWidth: 1, 
    title: { 
      text: yAxisTitle1 || '' 
    }, 
    labels: { 
      formatter: function(){ 
        return this.value/k1 + unit1; 
      } 
    } 
  },{ 
    lineWidth: 1, 
    opposite: true, 
    title: { 
      text: yAxisTitle2 || '' 
    }, 
    labels: { 
      formatter: function(){ 
        return this.value/k2 + unit2; 
      } 
    } 
  }]; 
  data.series = series; 
  return data; 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nest.js系列學(xué)習(xí)之初識(shí)nest項(xiàng)目框架及服務(wù)

    Nest.js系列學(xué)習(xí)之初識(shí)nest項(xiàng)目框架及服務(wù)

    這篇文章主要為大家介紹了Nest.js系列學(xué)習(xí)之初識(shí)nest項(xiàng)目框架及服務(wù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Node.js模塊化的使用詳細(xì)介紹

    Node.js模塊化的使用詳細(xì)介紹

    nodejs中的模塊化是指將每個(gè)js文件會(huì)被認(rèn)為單獨(dú)一個(gè)的模塊。模塊之間是互相不可見(jiàn)的。如果一個(gè)模塊需要使用另一個(gè)模塊,那么需要通過(guò)指定語(yǔ)法來(lái)引入要使用的模塊,而且只能使用引入模塊所暴露的內(nèi)容
    2022-08-08
  • node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析

    node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析

    這篇文章主要介紹了node.js突破nginx防盜鏈機(jī)制,下載圖片的方法,結(jié)合具體案例形式分析了防盜鏈的相關(guān)原理與node.js使用axios庫(kù)下載防盜鏈圖片的相關(guān)操作技巧,需要的朋友可以參考下
    2023-04-04
  • 詳解JWT與Token的應(yīng)用與原理

    詳解JWT與Token的應(yīng)用與原理

    這篇文章主要介紹了詳解JWT與Token的應(yīng)用與原理,JWT全稱“JSON Web Token”,是實(shí)現(xiàn)Token的機(jī)制,需要的朋友可以參考下
    2023-04-04
  • node.js文件系統(tǒng)之文件寫入實(shí)例詳解

    node.js文件系統(tǒng)之文件寫入實(shí)例詳解

    Node.js和其他語(yǔ)言一樣,也有文件操作,下面這篇文章主要給大家介紹了關(guān)于node.js文件系統(tǒng)之文件寫入的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • node中npm ERR! network ‘proxy‘ 配置問(wèn)題解決

    node中npm ERR! network ‘proxy‘ 配置問(wèn)題解決

    在進(jìn)行npm依賴管理時(shí),可能會(huì)遇到因網(wǎng)絡(luò)配置不當(dāng)導(dǎo)致的錯(cuò)誤,如npm ERR! network proxy config is set properly,下面就來(lái)介紹一下,感興趣的可以了解一下
    2024-09-09
  • Node.js中操作MongoDB的CRUD操作指南

    Node.js中操作MongoDB的CRUD操作指南

    在Node.js中操作MongoDB常見(jiàn)的庫(kù)有mongodb原生驅(qū)動(dòng)和mongoose等,本文將使用mongodb官方驅(qū)動(dòng)包來(lái)進(jìn)行示例,在開(kāi)始之前,請(qǐng)確保已經(jīng)安裝了MongoDB數(shù)據(jù)庫(kù)并且在本地啟動(dòng)了MongoDB服務(wù),需要的朋友可以參考下
    2024-01-01
  • nodejs教程之入門

    nodejs教程之入門

    本文是nodejs教程系列的入門篇,主要講述nodejs的特點(diǎn)、模塊機(jī)制/CommonJs(模塊引用、模塊定義、模塊標(biāo)識(shí)、模塊實(shí)現(xiàn))、包與NPM等知識(shí),非常的詳細(xì),這里推薦給大家作為入門的文章。
    2014-11-11
  • 基于node編寫excel讀取和導(dǎo)出的小工具

    基于node編寫excel讀取和導(dǎo)出的小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于node編寫一個(gè)小工具,可以實(shí)現(xiàn)excel讀取和導(dǎo)出,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-11-11
  • 基于Node.js的WebSocket通信實(shí)現(xiàn)

    基于Node.js的WebSocket通信實(shí)現(xiàn)

    這篇文章主要介紹了基于Node.js的WebSocket通信實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03

最新評(píng)論

合阳县| 麻栗坡县| 肃宁县| 乌苏市| 东丰县| 龙山县| 崇州市| 永州市| 辽阳县| 长泰县| 北票市| 镇平县| 英吉沙县| 宜阳县| 土默特右旗| 大同县| 江川县| 固镇县| 荥经县| 安新县| 临漳县| 洪洞县| 麻城市| 汝阳县| 秦皇岛市| 拜泉县| 义乌市| 平顶山市| 内丘县| 五莲县| 崇义县| 安阳县| 东光县| 隆安县| 墨竹工卡县| 荥阳市| 彝良县| 奉节县| 大新县| 荃湾区| 高邮市|