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

时间:2014-09-02 19:41:31

标签: node.js svg d3.js

给定一个运行a D3js dynamic dataviz

的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

它的工作方式是来自console.log()脚本的每条svgcreator.node.js消息都会打印到文件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

1 个答案:

答案 0 :(得分: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模块。