2014-09-02 101 views
1

由于JS脚本运行a D3js dynamic datavizNode.js:如何将JS变量的值从脚本传递给终端?

enter image description here

我目前使用打印出一个单一的视图到output.svg文件:

svgcreator.node.js

var jsdom = require('jsdom'); 
jsdom.env(
    "<html><body></body></html>",  // CREATE DOM HOOK: 
    [ 'http://d3js.org/d3.v3.min.js', // JS DEPENDENCIES online ... 
    'js/d3.v3.min.js' ],     // ... & offline 
// D3JS MAP DRAWING CODE * * * * * * * * * * * * * * * * * * * 
    function (err, window) { 

    var svg = window.d3.select("body") 
     .append("svg")     // append svg on body 
     ...        // more D3js code 
    // END svg design 

    //PRINTING OUT SELECTION 
    console.log(window.d3.select("body").html()); 
} 
// END (D3JS) * * * * * * * * * * * * * * * * * * * * * * * * 
); 

终端的NodeJS命令:

node svgcreator.node.js > output.svg 

它的工作方式是,从svgcreator.node.js脚本每个console.log()消息被打印到文件output.svg文件。由于D3js dataviz环绕全球,因此应该可以将每个视图的一个console.log()消息打印到正确命名的正确svg文件中。我应该从JS脚本到终端得到一个变量var country=...;。然后,我可以做这样的东西(?):

node svgcreator.node.js > $(JsVar.country).svg # nb: this var syntax if fictional 

因此,只要执行console.log()消息来了,在消息打印与正确的名称SVG文件。

另外,如何将JS变量的值从脚本传递给终端?

参见:Node.js : how to pass parameter's value from terminal to JS script

+0

我刚刚尝试在JS代码中执行'process.env.country = currentCountryName;',然后是终端中的'node svgcreator.node.js> $ country.svg'变体,但没有成功。 – Hugolpz 2014-09-02 21:20:35

+0

似乎这是相当棘手:http://stackoverflow.com/questions/22681043/ – Hugolpz 2014-09-02 22:28:36

+0

你只是在寻找一种方法来保存输出到一个适当的命名文件?该文件是否需要通过shell中的标准输出重定向来创建,或者节点本身是否可以创建该文件? – 2014-09-02 22:51:03

回答

1

做最简单的事情是只写节点的文件,而不是直接尝试使用> somefile.svg

这样做的代码非常简单。假设您的脚本中有一个名为country的变量,其中包含您要为其创建.svg的国家/地区的名称。请使用console.log来输出.svg文件,而不是使用fs.writeFileSync来代替country + '.svg'

所以,这样的:

console.log(window.d3.select("body").html()); 

会改变这样的:

fs.writeFileSync(country + '.svg', window.d3.select("body").html()); 

注:不要忘了var fs = require('fs');获得访问fs模块。

+0

如何知道我是否有这个模块? – Hugolpz 2014-09-02 23:48:24

+0

这是一个内置模块。不需要'npm install'它或任何东西,只需'var fs = require('fs');'在脚本的顶部。 – 2014-09-02 23:49:16

+0

测试,工作,感谢。我会在明天重写这个问题以更好地回答这个问题,或者找到一种方法。 – Hugolpz 2014-09-02 23:52:51

相关问题