Node.js formatted console output

Is there a simple built-in way to output formatted data to console in Node.js?

Indent, align field to left or right, add leading zeros?


Solution 1:

Two new(1) built in methods String.Prototype.padStart and String.Prototype.padEnd were introduced in ES2017 (ES8) which perform the required padding functions.

(1) node >= 8.2.1 (or >= 7.5.0 if run with the --harmony flag)

Examples from the mdn page:

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0");     // "00000abc"
'abc'.padStart(1);          // "abc" 

'abc'.padEnd(10);          // "abc       "
'abc'.padEnd(10, "foo");   // "abcfoofoof"
'abc'.padEnd(6, "123456"); // "abc123"
'abc'.padEnd(1);           // "abc"

For indenting a json onto the console try using JSON.stringify. The third parameter provides the indention required.

JSON.stringify({ a:1, b:2, c:3 }, null, 4);
// {
//    "a": 1,
//    "b": 2,
//    "c": 3
// }

Solution 2:

If the data is tabular, then the simplest way would be to do it with console.table

https://nodejs.org/dist/latest-v10.x/docs/api/console.html#console_console_table_tabulardata_properties

This is the code.

console.table(
  COMMANDS.map(command => {
    return {
      "Long Option": command.long_option,
      "Short Option": command.short_option,
      Description: command.description
    };
  })
);

You don't need external libraries for it. Here is sample output. You only need to pass an array object. enter image description here

Not only in Nodejs, but it also works in chrome.

https://developer.mozilla.org/en-US/docs/Web/API/Console/table

enter image description here

Solution 3:

There's nothing built into NodeJS to do this. The "closest" you'd come is util.format, which still doesn't do much unfortunately (reference).

You'll need to look into other modules to provide a richer formatting experience. For example: sprintf.

Sprintf-js allows both positional (0, 1, 2) arguments and named arguments.

A few examples of padding and alignment:

var sprintf=require("sprintf-js").sprintf;

console.log(sprintf("Space Padded => %10.2f", 123.4567));
console.log(sprintf("    _ Padded => %'_10.2f", 123.4567));
console.log(sprintf("    0 Padded => %010.2f", 123.4567));
console.log(sprintf(" Left align => %-10.2f", 123.4567));

Results:

Space Padded =>     123.46
    _ Padded => ____123.46
    0 Padded => 0000123.46
 Left align => 123.46    

Solution 4:

If you have simpler needs you can look into util.format. It can generate string from various parameters. If you want printf like formatting you can use either sprintf package or sprintf-js package.

Solution 5:

Take a look at Log4JS, which is an attempt at a functional port of Log4j