【问题标题】:Nodejs set command line argument as constantNodejs将命令行参数设置为常量
【发布时间】:2013-09-13 05:32:27
【问题描述】:

当我要启动服务器时,我想从命令行获取一个 argv,然后我想将它设置为模块的常量。

例如我想从命令行定义我的日志文件路径:

我的 starter.js 看起来像:

var optimist = require("optimist");
var server = require("./start_server");
var argv = optimist.describe('logpath', 'logptah for info').argv;
server.init({logpath:argv.logpath});

我的 start_server.js 看起来像:

    var restify = require('restify');
    var server = restify.createServer({
        name: 'dummy-project'
    });
    module.exports.logpath = null;
    function init(args){
        server.listen(1234, function() {
            console.log("inside logs");
            console.log(args.logpath);
            module.exports.logpath = args.logpath;
            console.log('%s listening at %s', server.name, server.url);
        });
    };
    module.exports.init = init;
    var fun = require('./common/loghandler');

我的 loghandler.js 看起来像:

var server = require('./../start_server');
console.log("inside log handler");
var LOGPATH = server.logpath;
console.log(LOGPATH);

当我跑步时node starter.js --logpath='../../custom/info.txt' 我没有在我的日志处理程序中获取日志路径。

似乎 logpath 处理程序在 server.listen 之前被调用。

控制台输出如下:

node starter.js --logpath='../../custom/info.txt'
inside log handler
null
inside log handler 
../../custom/info.txt
dummy-project listening at http://0.0.0.0:1234

我如何克服它并将我的日志路径作为命令行参数传递?

提前致谢。

【问题讨论】:

    标签: javascript node.js command-line-arguments


    【解决方案1】:

    您的init() 函数在starter.js 使用require('./start_server') 之后执行。当您使用require() 时,将加载文件及其所有依赖项。这意味着在此过程中,您还执行了require('./common/loghandler'),它在server.init()starter.js 中运行之前完成。由于此时尚未设置server.logpath,因此您将获得一个空值。

    除此之外,module.exports 是在需要时设置的,以后更改值无效。要解决您遇到的问题,您应该避免在应用程序完全加载之前使用函数,并将返回值放入您的模块中。

    【讨论】:

    • 如何避免这种情况“要解决您遇到的问题,您应该避免在应用程序完全加载之前使用正在运行的函数,并将返回值放入您的模块中。”我在模块的 init 内部传递 args,然后我想通过模块使用 init 外部的值。
    • 您可以将require('./common/loghandler'); 移动到init() 函数中,并将loghandler.js 更改为函数。然后,在启动期间,像这样传递来自init() 的值:require('./common/loghandler')(args.logpath);
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2017-09-09
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多