Javascript 从ClojureScript使用highcharts节点导出服务器时出现的问题;0x03执行图表生成时出错";
我在Node.js上有一个clojurescript应用程序,我正在尝试将highcharts导出服务器用作Node.js模块,以便生成用于生成PDF的图表 我遵循了“Using as a Node.js Module”下面的示例:。此示例使用以下javascript对象作为图表的输入数据:Javascript 从ClojureScript使用highcharts节点导出服务器时出现的问题;0x03执行图表生成时出错";,javascript,node.js,highcharts,Javascript,Node.js,Highcharts,我在Node.js上有一个clojurescript应用程序,我正在尝试将highcharts导出服务器用作Node.js模块,以便生成用于生成PDF的图表 我遵循了“Using as a Node.js Module”下面的示例:。此示例使用以下javascript对象作为图表的输入数据: var exportSettings = { type: 'png', options: { title: { text: 'My Chart' },
var exportSettings = {
type: 'png',
options: {
title: {
text: 'My Chart'
},
xAxis: {
categories: ["Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
},
series: [
{
type: 'line',
data: [1, 3, 2, 4]
},
{
type: 'line',
data: [5, 3, 4, 2]
}
]
}
};
在clojurescript中复制此示例,将导出设置定义为clojurescript映射并将其转换回javascript对象:
(def test-chart (clj->js {:type "png"
:options {:title {:text "My Chart"}
:xAxis {:categories ["Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]}
:series [{:type "line"
:data [1 3 2 4]}
{:type "line"
:data [5 3 4 2]}]}}))
将测试图表对象记录到控制台可确认它与示例中使用的javascript对象相同:
{ type: 'png',
options: { title: { text: 'My Chart' },
xAxis: { categories: [Array] },
series: [{ type: 'line', data: [ 1, 3, 2, 4 ] },
{ type: 'line', data: [ 5, 3, 4, 2 ] }]
}
}
进一步调用所需的Highcharts函数以设置phantom.js工作池并生成图表,如示例所示:
(doto Highcharts
(.initPool)
(.export test-chart (fn [err res]
(when err (println "****" err))))
(.killPool))
使用转换后的clojure映射作为输入数据调用export时,执行图表生成时出现错误“”0x03错误:请检查您的输入数据“
文档示例在regular Node.JS中确实有效,但是当使用从clojure映射转换的输入数据从clojurescript调用导出时,导出会失败,并出现此输入数据错误。由于转换后的对象在控制台中看起来是正确的,而其他所有操作都应该通过javascript互操作完成,所以我不确定这里会出现什么问题
如果从clojure映射转换,是否会导致导出器无法解析输入数据对象?或者问题可能是其他的,检查输入数据是一个误导性的错误消息?您的ClojureScript代码与自述文件中的示例代码不同。在本例中,
killPool
在传入export
的回调函数中被调用。在您的版本中,在调用导出后立即调用killPool
,因此图表生成可能没有时间完成。我怀疑这是导致错误的原因
更新后的ClojureScript如下所示:
(doto Highcharts
(.initPool)
(.export test-chart (fn [err res]
(when err (println "****" err))
(.killPool Highcharts))))
逗号在Clojure中是可选的。它们是在转换为JavaScript对象时通过clj->js转换自动添加的。你能把这个系列对象的样子贴出来吗。我真正想要的是看看数字是否被转换成字符串或其他类似的东西。这是正确的。[{type:'line',data:[1,3,2,4]},{type:'line',data:[5,3,4,2]}]Omg。当然,你完全正确。在几个小时的注视和改变细节的过程中,我完全忽略了这一点。正如您所怀疑的,在回调中调用killPool可以解决问题。