我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:

$ node server.js folder

这里server.js是我的服务器代码。Node.js帮助说这是可能的:

$ node -h
Usage: node [options] script.js [arguments]

如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。


当前回答

如果您的脚本名为myScript.js,并且希望将名和姓“Sean Worthington”作为如下参数传递:

node myScript.js Sean Worthington

然后在脚本中写下:

var firstName = process.argv[2]; // Will be set to 'Sean'
var lastName = process.argv[3]; // Will be set to 'Worthington'

其他回答

您可以使用system.args获取命令行参数。我使用下面的解决方案将参数解析为一个对象,这样我就可以按名称获取所需的参数。

var system = require('system');

var args = {};
system.args.map(function(x){return x.split("=")})
    .map(function(y){args[y[0]]=y[1]});

现在你不需要知道参数的索引。像args.whatever一样使用它

注意:应该使用file.js x=1y=2这样的命名参数这一解决方案。

传递、解析参数是一个简单的过程。Node为您提供process.argv属性,它是字符串数组,是调用Node时使用的参数。数组的第一个条目是Node可执行文件,第二个条目是脚本的名称。

如果您使用以下参数运行脚本

$ node args.js arg1 arg2

文件:args.js

console.log(process.argv)

您将获得类似数组的

 ['node','args.js','arg1','arg2']

ES6风格无依赖解决方案:

const longArgs = arg => {
    const [ key, value ] = arg.split('=');
    return { [key.slice(2)]: value || true }
};

const flags = arg => [...arg.slice(1)].reduce((flagObj, f) => ({ ...flagObj, [f]: true }), {});


const args = () =>
    process.argv
        .slice(2)
        .reduce((args, arg) => ({
            ...args,
            ...((arg.startsWith('--') && longArgs(arg)) || (arg[0] === '-' && flags(arg)))
        }), {});

console.log(args());

命令.js

非常适合定义您的选项、行动和论点。它还为您生成帮助页面。

迅速

如果您喜欢回调方法,则非常适合从用户获取输入。

共同提示

如果您喜欢生成器方法,则非常适合从用户获取输入。

乐观主义者(节点乐观主义者)

查看乐观主义库,它比手动解析命令行选项要好得多。

使现代化

Optimist已弃用。试试雅格士,它是乐观主义者的积极分支。