最近有个需求需要后台调统计数据,直接生成图片吐到前端,本来以为比较简单的,结果中间还是遇到了很多问题:
环境:
windows:python 2.6+,visual stdio 2008 express开发包
linux:gcc,python 2.6+
node版本:v0.10.35
node组件:express@3.18.6 jsdom@3.1.2 rsvg@0.2.2
本来想把node升到最新版本,在安装jsdom的时候报错,只能回退
jsdom@3支持node,更高版本只支持iojs
rsvg@0.2.5 在Red Hat 4.4.7上安装报错,rsvg@0.2.2安装成功
请求数据:
发httppost请求接口数据:
配置请求的header中Content-Length参数注意等于post数据的长度,原来没注意导致请求超时
注意header中Accept-Encoding参数是否配置了gzip,如果配置了gzip,返回时需要用zlib解压
highchart生成svg:
最大的问题是在浏览器可以生成svg,搬到node后不能生成,经过google,参数不断的排除,发现在highchart配置一定要增加下面几个:
chart: {
margin: [50, 30, 70, 50],//不加这个显示不出来
1000,
forExport: true//不加这个会报错
}
hightchart的版本使用的是v2.3.3,后台生成svg如果在图形上有标注,会显示不正常,使用最新版本会有改善。在本项目中发现使用rsvg转换png时,线宽异常,怀疑是rsvg版本太低导致的,在这个需求一定要使用rsvg转换,所以只能放弃使用最新版本的highchart
hightchart中datetime类型数据,需要加8个小时,保证显示正常,需要调整yAxis的x、y值,不然y坐标显示异常。
总结:node中模块开源,但是不同模块的版本兼容比较麻烦。后端node的模拟浏览器的的复杂展现中间可能有各种问题,碰到最麻烦的是不能调试,难以找到原因。
对于这个项目来说,可以考虑使用phantomjs解决