8

I am trying to implement raw command line arguments in Node.js.

When I implement simple variables everything works

(node example.js variable)

But when I implement as an argument an array it doesn't work

(node example.js "['127.0.0.5', '127.0.0.3']" )

Full code:

if (process.argv.length <= 3) {
    console.log("Usage: " + __filename + " SOME_PARAM");
    process.exit(-1);
}

var variable = process.argv[2];
var array = process.argv[3];

console.log('Host: ' + variable);
console.log('array: ' + array);

Problem

Example of input of arguments ( node example.js variable "['127.0.0.5', '127.0.0.3']" )

How to pass the second argument ("['127.0.0.5', '127.0.0.3']") as an array rather than as a string (as it is now), so that later I might access array's n-th element (example array[0] = '127.0.0.5' )

SOLUTION

The input should be like ( '["127.0.0.5", "127.0.0.3"]' changing the quotes), and also we need to parse the argument as JSON.

if (process.argv.length <= 3) {
    console.log("Usage: " + __filename + " SOME_PARAM");
    process.exit(-1);
}

var variable = process.argv[2];
var array = JSON.parse(process.argv[4]);

console.log('Host: ' + variable);
console.log('array: ' + array);
console.log(array[1]
1
  • You can't "pass it as an array" but you can parse the argument to build your array. You get a string no matter what, it's up to you to convert it into an array. Commented Nov 16, 2015 at 9:01

2 Answers 2

12

It's an old question, but if someone still looking for a simple solution, here it is.

Pass named arguments multiple times with same name.

node example.js --variable=127.0.0.5 --variable=127.0.0.3

Use minimist NPM package to extract args as:

const parseArgs = require('minimist');

const args = parseArgs(process.argv.slice(2));
console.log(args.variable);

Output:

[ '127.0.0.5', '127.0.0.3' ]
Sign up to request clarification or add additional context in comments.

2 Comments

Tried to Edit the post but "edit queue are full' so I'll put it a a comment. You may need to add a -- for npm to recognise the command line variable. node example.js -- --variable=127.0.0.5 --variable=127.0.0.3
For an array where you only need to pass the values I converted the whole thing to a comma separated string with implode and on the JS side then did a string.split(','), with that I was able to feed a Node script the values I got from a PHP array. I guess for a simple case this could be done..
3

You won't be able to pass an array. What you have to do (and possibly are in the middle of doing) is passing something like an array converted to a JSON string.

And in the application, you would just do a JSON.parse() to get your array out of the string.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.