如何在NodeJS中传递命令行参数?

4

我有一个文件结构,稍后我会列举出来。我有一个Web服务器,按下按钮时会启动命令行进程。我想添加选项以使用命令行参数以无头方式运行服务器。这是我应该做的方式吗?以下是我的项目结构。

/models
    /model1
    /model2
    /model3
/routes
    /index
    /test
    /users
    /credentials
    /adduser
/views
    /same as routes. Route 'test' has no layout.

在主页(或'/')中,我有一个函数,需要几个参数,通过单击主页上的按钮来启动该函数。然后我们通过'test/run'进行转发,并呈现'index'视图。该过程继续在终端中运行。我现在将发布一个函数示例。

    router.post('/run', ensureAuthenticated, function(req, res){
        return res.redirect('/test/running')
    });
    // Get Homepage
    router.get('/running', ensureAuthenticated, function(req, res){

        console.log(res.locals.user);
        // console.log(app.locals.user);


        const var1 = res.locals.user.username;
        const var2 = res.locals.user.username;
        const var3 = res.locals.user.username;
        const var4= res.locals.user.username;
        const deets = {
            var5,
            var6
        };

            res.render('index');

            dosomething(var1, var2, var3, var4, deets);
            setInterval(dosomething, 10 * 1000);
        })

    });

你们认为怎样才能通过命令行传递var1-6变量呢?目前我在Windows上运行,但目标服务器是Ubuntu系统。非常感谢各位的帮助。

2个回答

7
在node.js中,您可以使用内置的process变量传递CLI参数。
例如:
// test.js
var args = process.argv;
console.log(args[0]);  // it will give the node executable path
console.log(args[1]);   // it will give current file name
console.log(args[2]);   // cli arguments start index

现在正在运行代码

$ node test.js hello
/usr/bin/node
/home/blackdaemon/test.js
hello

1
听起来很完美!非常感谢,我现在会尝试一下 :D - TylerDurden
最好使用 process.argv.splice(2) 来提取仅包含命令行参数的数组。谢谢。 - tbhaxor

0
如果您喜欢像“-arg”“value”这样的模式,请尝试以下方法:
var getArgs = function(){
    var arr = {};
    var last;
    process.argv.forEach((a, idx) => {
        if(idx > 1){
            if(last){
                arr[last] = a;
                last = undefined;
            }
            else if(!last && a.match(/-\w+/))
                last = a;
        }
    })
    return arr;
}

结果应该是:

$ node index no valid command -ar3 dsds -arg1 323
{ '-ar3': 'dsds', '-arg1': '323' }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接