75

是否有一种简单的内置方法可以将格式化数据输出到 Node.js 中的控制台?

缩进,将字段左对齐或右对齐,添加前导零?

4

8 回答 8

65

ES2017 (ES8) 中引入了两个 new(1) 内置方法String.Prototype.padStartString.Prototype.padEnd,它们执行所需的填充功能。

(1)节点 >= 8.2.1(或 >= 7.5.0,如果使用 --harmony 标志运行)

来自 mdn 页面的示例:

'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"

要将json 缩进控制台,请尝试使用JSON.stringify。第三个参数提供所需的缩进。

JSON.stringify({ a:1, b:2, c:3 }, null, 4);
// {
//    "a": 1,
//    "b": 2,
//    "c": 3
// }
于 2017-09-08T05:18:45.483 回答
31

如果数据是表格的,那么最简单的方法是使用console.table

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

这是代码。

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

您不需要外部库。这是示例输出。您只需要传递一个数组对象。 在此处输入图像描述

不仅在 Nodejs 中,它也适用于 chrome。

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

在此处输入图像描述

于 2018-11-28T13:50:07.053 回答
26

NodeJS 没有内置任何东西来做到这一点。你来的“最接近”的是util.format,不幸的是,它仍然没有多大作用(参考)。

您需要研究其他模块以提供更丰富的格式化体验。例如:sprintf

Sprintf-js 允许位置 (0, 1, 2) 参数和命名参数。

填充和对齐的几个示例:

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));

结果:

Space Padded =>     123.46
    _ Padded => ____123.46
    0 Padded => 0000123.46
 Left align => 123.46    
于 2013-11-07T14:42:17.353 回答
7

如果您有更简单的需求,可以查看util.format。它可以从各种参数生成字符串。如果您想要类似 printf 的格式,您可以使用sprintf包或sprintf-js包。

于 2013-11-07T14:44:58.317 回答
3

看看Log4JS,这是对 Log4j 功能端口的尝试

于 2015-10-06T13:07:50.063 回答
2

如果我将 util.format 和 "".padStart/"".padEnd 结合在一起,如上面的帖子中所述,那么我会得到我想要的:

> console.log(util.format("%s%s","Name:".padEnd(10), "John Wall"))
Name:     John Wall
于 2021-04-30T01:47:09.497 回答
0

带有对齐console.tableNodeJS版本。

⚠ 这仅适用于主机版!⚠</p>

/**
 * @param {NonNullable<{
 *    [key: string]: string
 *  }>} data
 */
const consoleTable = (data) => {
  if (typeof data === 'object') {
    const e = Object.entries(data);
    let kl = 0;
    let vl = 0;

    for (const [k, v] of e) {
      if (k.length > kl) {
        kl = k.length;
      }

      const s = JSON.stringify(v);
      const l = s ? s.length : 0;

      if (l > vl) {
        vl = l;
      }
    }

    /** @type {{ [key: string] : string }} */
    const result = {};

    for (const [k, v] of e) {
      const s = JSON.stringify(v);
      result[k.padStart(kl)] = s ? s.padEnd(vl) : v;
    }

    console.table(result);
  } else {
    console.table(data);
  }
};

输出示例:

┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────┐
│     (index)     │                                         Values                                         │
├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│     CONFIG_FILE │ '"/Users/ecuomo/projects/zzzzz/xxxxxxxx/tttttttttt-web/jjjjjjjjjj-commons/config.env"' │
│        NODE_ENV │ '"development"                                                                       ' │
│         APP_ENV │ '"local-dev-edu"                                                                     ' │
│     APP_VERSION │ '"0-local-ecuomo"                                                                    ' │
│        BASE_URL │ '"http://localhost:3000"                                                             ' │
│    CDN_BASE_URL │ '"http://localhost:3000/static"                                                      ' │
│    API_BASE_URL │ '"http://localhost:3000/api"                                                         ' │
│           MONGO │ '"mongodb://mongo:27017/xxxxxxxxxxprod"                                              ' │
│      MYSQL_HOST │ '"mysql"                                                                             ' │
│      MYSQL_PORT │ '3306                                                                                ' │
│    MYSQL_DB_ETL │ '"xxxxxxxxxx_etl"                                                                    ' │
│  MYSQL_DB_STATS │ '"xxxxxxxxxx_stats"                                                                  ' │
│ MYSQL_DB_ZAPIER │ '"xxxxxxxxxx_yyyyyy"                                                                 ' │
│   POSTGRES_HOST │ '"postgres"                                                                          ' │
│   POSTGRES_PORT │ '5432                                                                                ' │
│     POSTGRES_DB │ '"xxxxxxxxxx"                                                                        ' │
│      REDIS_HOST │ '"redis"                                                                             ' │
│      REDIS_PORT │ '"6379"                                                                              ' │
│    REDIS_MASTER │                                       undefined                                        │
│      REDIS_MODE │ '"single"                                                                            ' │
└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────┘
于 2021-09-10T21:00:18.543 回答