2014-09-02 95 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

相關問題