验证是否从Node.js安装了Java

验证是否从Node.js安装了Java,java,javascript,node.js,Java,Javascript,Node.js,我正在构建一个在Node.js中使用Java的应用程序。我制作了一个函数来检查Java版本: function javaversion() { var spawn = require('child_process').spawn('java', ['-version']); spawn.stderr.on('data', function(data) { data = data.toString().split('\n')[0]; var java

我正在构建一个在Node.js中使用Java的应用程序。我制作了一个函数来检查Java版本:

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会抛出enoint错误,因为模块“child_process”无法生成该进程。如何验证Java是否是从Node.js安装的

我感谢你的帮助

这个怎么样

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);
})

您是否考虑过检查环境变量,如classpath或。。。?然后寻找二进制文件?@wiredparie,是的,我考虑过,但这对所有系统来说都不是一个好主意。例如,在OSX10.8中,未设置类路径。我解决了处理未生成进程的错误的问题,如Sudsy建议的那样。谢谢。我已经安装了Java(通过Windows安装程序),但是它不在路径中,所以这个方法完全失败。因此,对于“所有系统”来说,这似乎不是一个好的解决方案。我如何检查是否安装了
JDK
?如果没有安装,请安装它。它在openjdk上失败。将正则表达式从“java版本”更改为“(java | openjdk)版本”以在openjdk上工作。