2013-11-07 3 views
35

Есть ли простой встроенный способ вывода форматированных данных на консоль в Node.js?Node.js форматированный вывод консоли

Отступ, выровнять поле влево или вправо, добавить ведущие нули?

+1

Я не знаю ни одного из них, но аналогичный - это «цвета», и он может форматировать строки, выводимые, например. '" Зеленый цвет ".green' –

+0

Я предполагаю, что вы просите сделать что-то вроде' console.setup ({color: 'green', preend: '0000'}) ', но уже встроен? Вы можете сделать свой собственный метод ведения журнала или переопределить метод 'stdout.write' (хотя люди предлагают не переопределять собственные функции). – matth

+0

Я думал о 'printf()' с различными удобными модификаторами формата к выходной строке. – exebook

ответ

17

Два новых (1), построенный в методах String.Prototype.padStart и String.Prototype.padEnd были введены в ES2017 (ES8), которые выполняют функции, необходимые дополнения.

(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 
// } 
+3

Может быть стоит отметить, что это поддерживается только в узле> = 8.2.1 (или> = 7.5.0 при запуске с флагом '--harmony'), так как он довольно недавний. – Semicolon

+0

Это работает для меня на v8.1.2, даже без флага. –

23

В NodeJS нет ничего, чтобы сделать это. «Ближайшим» вы пришли util.format, что, к сожалению, мало что делает (reference).

Вам нужно будет изучить другие модули, чтобы обеспечить более богатый опыт форматирования. Например: 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  
+1

util.format бесполезен, интересно, почему он существует. – exebook

+4

'util.format' лучше, чем ничего. Но не намного лучше. :) Если это была просто часть 'console.log' ...то это будет иметь больше смысла. – WiredPrairie

+0

Я добавил несколько примеров, чтобы закончить ответ. – WiredPrairie

7

Если у вас есть потребности проще, вы можете посмотреть в util.format. Он может генерировать строку из различных параметров. Если вы хотите форматировать printf, вы можете использовать либо пакет sprintf, либо пакет sprintf-js.

+1

Кажется, как и мой ответ? :) – WiredPrairie

+0

Да, всего несколько минут позже. – user568109

2

Взгляните на Log4JS, что попытка функционального порта Log4j

3

Вам также могут понравиться строкового набора и терминала-комплект.

https://www.npmjs.com/package/string-kit

https://www.npmjs.com/package/terminal-kit

https://blog.soulserv.net/terminal-friendly-application-with-node-js-part-ii-moving-and-editing/

+4

Эй! Добро пожаловать в переполнение стека! Хотя ссылка может содержать ответ на вопрос, убедитесь, что вы предоставили основную информацию о своем ответе, так что, если эта ссылка когда-либо снята, ответ остается в силе. Благодаря! –

Смежные вопросы