关于svg:Node.js:如何将JS变量的值从脚本传递到终端?

Node.js : how to pass JS variable's value from script to terminal?

给定一个运行d3js动态dataviz的js脚本

enter image description here

我目前使用以下方法将单个视图打印到output.svg文件中:

svgcreator.node.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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) * * * * * * * * * * * * * * * * * * * * * * * *
);

终端节点命令:

1
node svgcreator.node.js > output.svg

它的工作方式是将来自svgcreator.node.js脚本的每个console.log()消息打印到文件output.svg文件中。

因为这个d3js dataviz可以在全球范围内运行,所以应该可以将每个视图的一条console.log()消息打印到一个正确命名的SVG文件中。我想我应该得到一个变量,比如从JS脚本到终端的var country=...;。那么,我可以做(?)比如:

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

所以每当一个console.log()消息出现时,中的消息就会以正确的名称打印到SVG文件中。

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

另请参见:node.js:如何将参数值从终端传递到js脚本


最简单的方法是直接将节点写入文件,而不是尝试使用> somefile.svg

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

所以,这个:

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

将改为:

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

注意:不要忘记使用var fs = require('fs');访问fs模块。