Highcharts+NodeJS搭建数据可视化平台

前一段时间完成了一个数据可视化项目,由后台NodeJS+Highcharts框架进行搭建。下面分享一下整个开发过程的流程,以及使用Highcharts框架的经验。

一、数据的读取

由于数据库使用的是Mysql数据库,在NodeJS中,可以使用NodeJS中的mysql模块进行mysql数据库的相关操作,通过npm安装即可。

1.数据库基本配置

为了方便,我们最好先进行一个数据库连接的基本配置,mysql模块需要的配置信息如下:

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

tips:当我们在本地开发时,可以先将线上数据库中的数据拷贝一部分到本地,如利用php myadmin,然后通过读取本地数据进行开发。

2.数据库连接

我们可以设定,当访问到某个url后,自动建立mysql连接,代码如下:

router.get(‘/test‘, function (req, res, next) {
  var username = req.cookies.username;
  if(typeof username === "undefined" || username != "[email protected]"){
    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);
      });
    }
  }
})

注意这里面的验证。我们这里的项目比较简单,仅使用cookie做身份验证。当我们要建立数据库连接时,首先一定要进行身份验证,否则任何人发送请求就都可以和我们的数据库进行连接了,会造成很严重的安全隐患。

通过调用mysql中的connect方法,进行mysql数据库的连接。这里注意,数据库的连接不能并行,否则会报错。因此为了安全,我们首先必须要先判断一下当前是否已经连接了数据库,这里可以使用connection.threadId判断其是否定义,从而判断其是否已经建立连接。如果已经建立了连接,则不要再次建立连接。
3.执行查询语句

通过调用query()方法,即可处理语句查询操作,输入的内容可以是任何正确的mysql查询语句,也可以嵌套其他变量,最后只要拼接出一个字符串即可。实例如下:

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));
  });
})

这里我们根据获取到的开始日期和截止日期,拼接成一个query语句,查询出我们需要的数据,最后可以在回调函数中调用(rows参数),是一个数组。

最后,将这个数据反回给前台即可,前台进行数据的处理和可视化。

二、HighCharts使用

Highcharts的使用可以在官方API上查看各个方法,而且有在线演示,非常方便(推荐Highcharts中文网)。其中最麻烦的就是要绘制的图表的配置项所需要的各个参数所组成的对象。建议设定一个构造这个对象的构造器,根据传入的各个参数构造出对应需要的HighCharts配置项。因为传入的参数过多,我们要使用对象的形式进行构建。关于HighCharts框架的更多使用,将在以后博客中更新,可以先看一下下面这个构造的例子。

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: "正在为您加载数据......"
  };
  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;
}
时间: 2024-10-14 01:04:22

Highcharts+NodeJS搭建数据可视化平台的相关文章

手把手教你Web数据可视化平台搭建

原文链接:http://www.jianshu.com/p/ad1a49375da4 ,源代码请访问原文 PS.想获取全部源代码或者有不懂的问题的感兴趣的同学,请访问原文- 一.项目展示 这个Web数据可视化平台的效果如下(没加样式,主要侧重功能) 效果演示 这个数据可视化Demo能够实现如下功能: 1.csv文件上传(其他格式文件也可以) 2.自定义想要显示的数据 2.nodejs搭建服务器,解析csv文件数据 3.使用Highcharts进行数据可视化 4.关键参数计算并展示 二.实现思路和

免费的数据分析,数据可视化平台

随着各行各业信息化系统的不断建设,由于不同建设时期,不同开发技术等因素,导致形成许多不同的数据源.信息孤岛,通过数据交换同步方式,抽取.汇聚数据,以实现数据整合,充分挖掘数据的价值. TreeSoft数据库管理系统,使用JAVA开发,基于WEB方式,实现 MySQL,Oracle,PostgreSQL, SQL Server,mongoDB ,Hive 等数据库间的数据定时交换同步,软件采用企业级调度框架Quartz,保障数据的稳定交换同步.交换方式包括:新增,更新,覆盖等,执行方式包括:定时循

微信公众平台(1)-用nodejs搭建公众平台

今天给大家介绍如何用nodejs搭建微信公众平台. 先给大家介绍下微信公众平台:想必微信大家都知道,而微信公众平台就是特殊的微信号,能给关注的微信用户群发消息,关注的用户也可以通过自己查看服务并填写信息完成某些服务. 微信公众平台现在分为三种账号:订阅号.服务号.企业号. 订阅号主要针对于媒体,企业宣传,特点就是发送信息的次数相对于服务号要来得多:服务号主要针对于微商户.企业等,用于为关注用户提供服务,虽然发送信息的次数被限制得比较少,但是有很多订阅号不具备的接口,比如说自定义菜单,微信支付等:

39个大数据可视化工具

无论是在行政演示中为数据点创建一个可视化进程,还是用可视化概念来细分客户,数据可视化都显得尤为重要.本文将推荐39个可用于处理大数据的可视化工具. &amp;lt;img class="size-full wp-image-407608 aligncenter" src="http://image.woshipm.com/wp-files/2016/09/dashuju-1.png" alt="dashuju-1" width="

ROCKET 数据可视化可以如此简单

Rocket(http://www.zhoushankj.com) 致力于使数据友好并且充满活力. 简单!简单!简单!重要的事情说三遍.图形化操作,布局灵活,所见即所得.通过拖.拉.拽就可以灵活布局. 所有的属性配置均是所见即所得,不用操作完了还要刷新还要等待.图表丰富 涵盖各行业图表,满足各种需求. 柱图.折线图.饼图.散点图.地图.雷达图.仪表盘.漏斗图.水球图.表格.列表.富文本.标题... 还有各种常用形式的快捷操作噢,看下面而且Rocket是支持定制图表的噢!!! 多数据源 支持关系型

ROCKET 零代码玩转数据可视化

Rocket 致力于使数据友好并且充满活力. 简单!简单!简单! 重要的事情说三遍. 图形化操作,布局灵活,所见即所得. 通过拖.拉.拽就可以灵活布局.  所有的属性配置均是所见即所得,不用操作完了还要刷新还要等待.  图表丰富 涵盖各行业图表,满足各种需求. 柱图.折线图.饼图.散点图.地图.雷达图.仪表盘.漏斗图.水球图.用户画像.字符云.进度条.嵌入.表格.列表.条列表.文本.数字.富文本.标题... 还有各种常用形式的快捷操作噢,看下面  而且Rocket是支持定制图表的噢!!! 多数据

宜人贷PaaS数据服务平台Genie:技术架构及功能

上篇:架构及组件 一.数据平台的发展 1.1 背景介绍 随着数据时代的到来,数据量和数据复杂度的增加推动了数据工程领域的快速发展.为了满足各类数据获取/计算等需求,业内涌现出了诸多解决方案.但大部分方案都遵循以下原则: 降低数据处理成本 合理提高数据使用/计算效率 提供统一的编程范式 宜人贷的数据服务平台也是遵循这三个原则.本人有幸亲身经历了宜人贷数据平台Genie的整个发展过程,纵观宜人贷和业内,可以说Genie的发展是工业界数据平台发展的缩影. Google 的三大论文和Apache Had

基于Python的数据可视化库pyecharts介绍

什么是pyecharts? pyecharts 是一个用于生成 Echarts 图表的类库. echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化.pyecharts 是一个用于生成 Echarts 图表的类库.实际上就是 Echarts 与 Python 的对接. 使用 pyecharts 可以生成独立的网页,也可以在 flask , Django 中集成使用.pyecharts包含的图表 Bar .Bar3D.Boxplot.EffectScatter .Funnel.G

《基于Vue的数据可视化系统的设计与实现》文献阅读(十四)

一.基本信息 标题:基于Vue的数据可视化系统的设计与实现 时间:2018 来源:华中科技大学 关键词:数据可视化:数据可视化工具:探索式分析:Vue 二.研究内容 1.主要内容: 1.1 研究背景与意义随着互联网技术与信息化进程的高速发展,不管是传统行业还是互联网企业其信息化与数字化的进程不断加快,产生数据的速度及数据量也在飞速上升,这些数据中通常蕴含着大量对企业有价值的信息,如何从这些数据中发掘有价值的信息成为企业迫切需求.为了使企业更加方便有效的利用这些数据,可视化系统应运而生.数据可视化