2013-11-01 32 views
3

我正在構建一個在Node.js中使用Java的應用程序。我做了一個函數來檢查Java版本:驗證Java是否從Node.js安裝

function javaversion() { 
    var spawn = require('child_process').spawn('java', ['-version']); 
    spawn.stderr.on('data', function(data) { 
     data = data.toString().split('\n')[0]; 
     var javaVersion = new RegExp('java version').test(data) ? data.split(' ')[2].replace(/"/g, '') : false; 
     if (javaVersion != false) { 
      // TODO: We have Java installed 
     } else { 
      // TODO: No Java installed 
     } 
    }); 
} 

但對於Java的安裝不上,Node.js的拋出ENOENT錯誤的系統,因爲模塊「child_process」只是不能產卵的過程。我如何驗證Java是否從Node.js安裝?

我感謝您的幫助!

+0

你有沒有考慮檢查類路徑或...等環境變量?然後尋找二進制文件? – WiredPrairie

+0

@WiredPrairie,是的,我認爲,但對所有系統來說這不是一個好主意。例如,在OS X 10.8中,CLASSPATH未設置。我解決了處理產生該過程的錯誤的問題,就像Sudsy建議的那樣。謝謝。 – Formiga

+0

我已經安裝了Java(根據Windows安裝程序),但它不在路徑中,因此此方法完全失敗。所以,對於「所有系統」來說,這似乎不是一個好的解決方案。 – WiredPrairie

回答

6

這是怎麼回事?

function javaversion(callback) { 
    var spawn = require('child_process').spawn('java', ['-version']); 
    spawn.on('error', function(err){ 
     return callback(err, null); 
    }) 
    spawn.stderr.on('data', function(data) { 
     data = data.toString().split('\n')[0]; 
     var javaVersion = new RegExp('java version').test(data) ? data.split(' ')[2].replace(/"/g, '') : false; 
     if (javaVersion != false) { 
      // TODO: We have Java installed 
      return callback(null, javaVersion); 
     } else { 
      // TODO: No Java installed 

     } 
    }); 
} 

javaversion(function(err,version){ 
    console.log("Version is " + version); 
}) 
+0

你說得對。我錯過了'錯誤'事件。謝謝。 – Formiga