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

Posted

技术标签:

【中文标题】Node.js:如何将 JS 变量值从脚本传递到终端?【英文标题】:Node.js : how to pass JS variable's value from script to terminal? 【发布时间】:2014-10-27 04:10:38 【问题描述】:

给定一个运行a D3js dynamic dataviz的JS脚本

我目前使用以下方法将单个视图打印到 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

【问题讨论】:

我只是尝试在JS代码中做process.env.country = currentCountryName;,然后在终端中输入node svgcreator.node.js &gt; $country.svg的变体,但没有成功。 似乎很棘手:***.com/questions/22681043 您是否只是在寻找一种将输出保存到适当命名的文件的方法?文件需要在shell中通过stdout重定向创建,还是node自己创建文件可以吗? 我是 nodejs 的新手并使用我所知道的方式,但是 node 可以创建文件,因为它是一个有效的 SVG,其代码是由我的 D3js 代码生成的。 【参考方案1】:

最简单的做法是让节点直接写入文件,而不是尝试使用&gt; 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 模块。

【讨论】:

如何知道我是否有这个模块? 它是一个内置模块。无需npm install 它或其他任何东西,只需在脚本顶部var fs = require('fs'); 测试,工作,谢谢。我明天会重写问题以更好地适应这个答案,或者找到一种方法。

以上是关于Node.js:如何将 JS 变量值从脚本传递到终端?的主要内容,如果未能解决你的问题,请参考以下文章

如果传递参数,则从脚本外部强制变量值

如何将 AngularJS 变量值传递给 C# 控制器?

Django:如何将python变量值传递给javascript文件?

如何将变量值“传递”给 JSON 动态对象?

如何将信息从 node.js 传递到 html

如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类python tkinter