2017-04-14 85 views
1

我正在嘗試使用iisnode(https://github.com/tjanczuk/iisnode)在node.js下設置Highcharts導出服務器。它基本上充當通過節點到IIS的請求之間的管道。大!只有,如何「安裝」highcharts導出服務器,以便使用iisnode?我做了關於如何安裝highcharts-export節點模塊的說明,但它安裝在(Windows)AppData \ Roaming \ npm下。如何移動或將iisnode指向導出服務器? 這個出口服務器通過以下一次從NPM安裝運行:獲取Highcharts導出服務器在iisnode下運行的問題

highcharts-export-server --enableServer 1 

因此,要安裝該軟件,並在IIS8使用+ iisnode 1)什麼是安裝出口本地服務器(在Windows上正確的目錄通過npm拉入的模塊轉到C:\ Users \\ AppData \ Roaming \ nmp \,其中是使用npm登錄的用戶來安裝軟件包)? 2)這需要什麼iisnode配置?

我有iisnode設置和運行在我們的開發箱和所有的例子工作。我的混淆部分是因爲issnode缺乏文檔。我發現的所有鏈接只是重複issnode開發人員的鏈接中列出的項目,而沒有實際的「這裏是如何獲取存在於npm中的節點應用程序並使其在issnode中工作。」我不一定需要我的手每一步的每一步。我只看到沒有可以遵循的步驟清單。

+0

從GitHub自述'的應用程序可以被用來作爲一個CLI(命令行界面),如一個HTTP服務器,或者一個node.js模塊。你可以代理請求,或者你可以通過編程來調用它。沒有理由堅持來自cli的獨立http。 – Gntem

+0

好吧,這聽起來像我想要的,但如何?最好是iisnode文檔有限。我想我會想要這個作爲節點模塊,對吧?應用程序URL將獲取導出圖像和處理的請求並返回圖像。 – wergeld

+0

是的,檢查模塊文檔它有所有的細節作爲模塊使用它。你也必須在你的軟件包中進行本地安裝,而不是全局安裝。 – Gntem

回答

0

安裝節點(如果尚未安裝)
安裝iisnode(如果尚未安裝=>https://github.com/tjanczuk/iisnode
驗證IIS已iisnode註冊爲模塊
創建一個新的應用程序池,設置爲「無託管代碼」
創建一個新的空網站
負荷iisnode樣本內容到它,更新的web.config
驗證你可以打它,它運行,可以寫它的日誌
去到IIS網站文件夾,然後運行這些npm命令
npm init/empt Ÿ
NPM安裝--save highcharts出口服務器
NPM安裝--save TMP

添加文件hcexport.js和重新配置的web.config


var fs = require('fs'); 
var http = require('http'); 
var path = require("path"); 
var tmp = require('tmp'); 

const exporter = require('highcharts-export-server'); 

http.createServer(function (req, res) { 
    try { 

     if (req.method !== 'POST') { throw "POST Only"; } 
     var body = ''; 

     req.on('data', function (data) { 
      body += data; 
     }); 
     req.on('end', function() { 
      if (body === '') { throw "Empty body"; } 

      var tempFile = tmp.fileSync({discardDescriptor: true, postfix: ".svg", dir: process.cwd()}); 

      var input = JSON.parse(body); 
      input.outfile = path.basename(tempFile.name); 

      exporter.initPool(); 
      exporter.export(input, function (err, exres) { 
       if (err) { throw "Export failed"; } 

       var filename = path.join(process.cwd(), exres.filename); 

       exporter.killPool(); 

       fs.readFile(filename, function(err, file) { 
        res.writeHead(200, { 'Content-Type': 'image/svg+xml', 'Content-disposition': 'attachment; filename=' + exres.filename }); 
        res.write(file.toString()); 
        res.end(); 
        tempFile.removeCallback(); 
       });    
      }); 

     }); 

    } catch (err) { 
     console.log({port: process.env.PORT, error: err}); 
     res.writeHead(409, { 'Content-Type': 'text/html' }); 
     res.end(err.message); 
    } 
}).listen(process.env.PORT); 

延伸需要支持您計劃使用的導出類型。

的highcharts出口服務器使用phantomjs內部,這可以利用可用的CPU高達100%運行一些錯誤情況下離開,如果你看到這一點,你可以用它殺:
TASKKILL/IM phantomjs.exe/F

+0

有沒有人試過這個和工作? –

+0

這工作。請記住,您必須將類型設置爲'type:svg',否則您將遇到TypeError。 – Syjin

0

從saukender的解決方案似乎工作,但它似乎總是初始化一個新的幻影工作者池每次。

如果您已經有節點和issnode設置,另一種解決方案是直接啓動highcharts導出服務器,而不是手動調用導出功能。這似乎提供了更好的性能,因爲它不會在每個請求上初始化工作池。

// app.js 
const highcharts = require("highcharts-export-server"); 

highcharts.initPool(); 
highcharts.startServer(process.env.PORT || 8012); 

不要忘了把你的web.config指向app.js

我發現這兩個資源非常有用的安裝過程中: