我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
当前回答
process.argv是您的朋友,在NodeJS中本机支持捕获命令行参数。参见以下示例:
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
})
其他回答
使用最小npm包。这是最简单的方法,不需要担心任何事情。
const arguments = require("minimist")(process.argv.slice(2));
// get the extra argument of command line .
eg node app.js --process="sendEmailWithReminder"
我们也可以在windows任务调度程序中使用它。
没有库
如果您想在vanilla JS/ES6中执行此操作,可以使用以下解决方案
仅在NodeJS>6中工作
const args = process.argv
.slice(2)
.map((val, i)=>{
let object = {};
let [regexForProp, regexForVal] = (() => [new RegExp('^(.+?)='), new RegExp('\=(.*)')] )();
let [prop, value] = (() => [regexForProp.exec(val), regexForVal.exec(val)] )();
if(!prop){
object[val] = true;
return object;
} else {
object[prop[1]] = value[1] ;
return object
}
})
.reduce((obj, item) => {
let prop = Object.keys(item)[0];
obj[prop] = item[prop];
return obj;
}, {});
这个命令
node index.js host=http://google.com port=8080 production
将产生以下结果
console.log(args);//{ host:'http://google.com',port:'8080',production:true }
console.log(args.host);//http://google.com
console.log(args.port);//8080
console.log(args.production);//true
p.s.请更正map和reduce函数中的代码如果您找到更优雅的解决方案,谢谢;)
如果您的脚本名为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'
最初的问题是要求传递命令行参数,而不是更复杂的参数解析。然而,面对所有复杂的答案,他们都错过了一个简单而有用的变化。
你知道Unix shell支持命名参数吗?这可以追溯到20世纪80年代最初的伯恩贝壳。用法很简单:
$ FOO=one BAR=two nodejs myscript.js
要获取Javascript中的参数:
var foo = process.env.FOO;
var bar = process.env.BAR;
一旦超过两个或三个参数,命名参数就更容易读取。可选参数很简单,顺序也不固定。
(这甚至可以在Windows上运行,因为最近支持Unix shell。)
而且,几乎没有Unix程序员知道这种用法
传递、解析参数是一个简单的过程。Node为您提供process.argv属性,它是字符串数组,是调用Node时使用的参数。数组的第一个条目是Node可执行文件,第二个条目是脚本的名称。
如果您使用以下参数运行脚本
$ node args.js arg1 arg2
文件:args.js
console.log(process.argv)
您将获得类似数组的
['node','args.js','arg1','arg2']