当app使用node-windows设置为Windows Service时,node-config不会读取配置文件

时间:2014-08-07 00:33:01

标签: windows node.js

我正在使用node-windows来设置我的应用程序以作为Windows服务运行。我正在使用node-config来管理配置设置。当然,当我使用node app.js命令手动运行我的应用程序时,一切正常。当我将其作为服务安装并启动时,配置设置为空。我在production.json文件夹中有./config个文件,我可以在安装脚本中将NODE_ENV设置为production。我可以确认变量设置正确但仍然没有。即使我在服务的log.info('CONFIG_DIR: ' + config.util.getEnv('CONFIG_DIR'));值中明确设置undefinedenv也会生成var Service = require('node-windows').Service; var path = require('path'); // Create a new service object var svc = new Service({ name:'Excel Data Import', description: 'Excel Data Import Service.', script: path.join(__dirname, "app.js"), // path application file env:[ {name:"NODE_ENV", value:"production"}, {name:"CONFIG_DIR", value: "./config"}, {name:"$NODE_CONFIG_DIR", value: "./config"} ] }); // Listen for the "install" event, which indicates the // process is available as a service. svc.on('install',function(){ svc.start(); }); svc.install(); 。寻找任何见解。

安装脚本:

var config = require('config');
var path = require('path');    

var EventLogger = require('node-windows').EventLogger;
var log = new EventLogger('Excel Data Import');

init();

function init() {
    log.info("init");

    if(config.has("File.fileFolder")){
        var pathConfig = config.get("File.fileFolder");   

        log.info(pathConfig);
        var DirectoryWatcher = require('directory-watcher');
        DirectoryWatcher.create(pathConfig, function (err, watcher) {
            //...
        });
    }else{
        log.info("config doesn't have File.fileFolder");            
    }
}

app脚本:

{{1}}

1 个答案:

答案 0 :(得分:1)

我知道这个反应很晚,但我也有同样的问题,这就是我如何解决它:

var svc = new Service({
  name:'ProcessName',
  description: 'Process Description',
  script: require('path').join(__dirname,'bin\\www'),
  env:[
        {name: "NODE_ENV", value: "development"}, 
        {name: "PORT", value: PORT},
        {name: "NODE_CONFIG_DIR", value: "c:\\route-to-your-proyect\\config"}
      ]
});

当您使用Windows时,不需要为您的环境变量添加前缀$。

此外,如果您的运行脚本与配置目录不在同一目录上,则必须提供配置目录的完整路径。

当你有节点窗口错误时,也有助于深入了解错误日志。它位于rundirectory / daemon / processname.err.log

我希望这会对某人有所帮助。