gpt4 book ai didi

javascript - Nodejs 将命令行参数设置为常量

转载 作者:太空宇宙 更新时间:2023-11-04 01:10:08 25 4
gpt4 key购买 nike

当我要启动服务器时,我想从命令行获取 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

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

提前致谢。

最佳答案

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

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

关于javascript - Nodejs 将命令行参数设置为常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com