Генерация графиков HighStock на стороне сервера с помощью NodeJS

Я использую HighStock для создания некоторых диаграмм в браузере. Но теперь я хочу сохранить некоторые из них на сервере. Итак, я знаю, что HighCharts можно экспортировать на сервер, но я бы предпочел использовать другой способ, если это возможно. Дело в том, чтобы запустить HighStock на сервере и преобразовать svg в какой-либо формат изображения, а затем сохранить его там.

Быстрый поиск в Google дает мне эту страницу . Комбинация HighCharts и NodeJS кажется правильным способом, но это решение не работает для новых версий HighCharts. Точнее, использование модуля jsdom (v0.2.10 - последняя) в NodeJS с HighStock v1.0.2 (посмотрите следующий код):

var jsdom = require('jsdom');
var fs = require('fs');
var jQuery = fs.readFileSync('./js/jquery-1.7.min.js').toString();
var Highstock = fs.readFileSync('./js/highstock.js').toString();
jsdom.env({
    html: '
', src: [ jQuery, Highstock ], done: function(errors, window) { if (errors) return console.log(errors); var Highcharts = window.Highcharts; var chart = new Highcharts.Chart(options); } });

выдает исключение:

Error: Invalid character: Invalid character in tag name: <

Каким-то образом эти две библиотеки делают похоже, не работают вместе. Так что это может работать со старыми версиями HighStock, но на самом деле мне нужен HighStock v1.0.2.

Есть ли решение этой проблемы? Лучшая библиотека, чем jsdom ? Или какие-то странные, но работающие уловки? Любая идея приветствуется. :)

// РЕДАКТИРОВАТЬ

Благодаря ReCoder мне удалось заставить его работать. Главное было добавить к опциям флаг forExport (предотвращающий исключения). К сожалению, это сгенерировало диаграмму, но не обновило держатель. Мне удалось заставить его работать после добавления экспортного модуля (часть пакета HighStock).Полный рабочий код выглядит следующим образом:

var jsdom = require('jsdom');
var fs = require('fs');
var jQuery = fs.readFileSync('./js/jquery-1.7.min.js').toString();
var Highstock = fs.readFileSync('./js/highstock.src.js').toString();
var Exporting = fs.readFileSync('./js/exporting.src.js').toString();

jsdom.env({
    html: '
', src: [ jQuery, Highstock, Exporting ], done: function(errors, window) { if (errors) return console.log(errors); var Highcharts = window.Highcharts; var chart = new Highcharts.Chart({ chart: { renderTo: 'container', animation: false, forExport: true }, exporting: { enabled: false }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, series: [{ animation: false, name: 'Tokyo', data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] }, { animation: false, name: 'New York', data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] }, { animation: false, name: 'Berlin', data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] }, { animation: false, name: 'London', data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] }] }); var svg = chart.getSVG(); fs.writeFile("./test.svg", svg, function(err) { if(err) { console.log(err); } else { console.log("The file was saved!"); } }); } });

Диаграмма не так хороша, как должна быть (например, плохо размещены ярлыки), но, возможно, дело в параметрах настройки. По крайней мере, это работает!

7
задан freakish 20 March 2012 в 10:15
поделиться