Jak Mogę uzyskać pełny obiekt w Node.konsola js.log (), a nie " [Object]"?
Podczas debugowania za pomocą console.log()
, Jak mogę uzyskać pełny obiekt?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Wyjścia:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Ale chcę również zobaczyć zawartość właściwości f
.
17 answers
Musisz użyć util.inspect()
:
const util = require('util')
console.log(util.inspect(myObject, {showHidden: false, depth: null}))
// alternative shortcut
console.log(util.inspect(myObject, false, null, true /* enable colors */))
Wyjścia
{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }
Zobacz util.inspect()
docs .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 18:28:55
Możesz użyć JSON.stringify
i uzyskać ładne wcięcie, a także być może łatwiejszą do zapamiętania składnię.
console.log(JSON.stringify(myObject, null, 4));
{
"a": "a",
"b": {
"c": "c",
"d": {
"e": "e",
"f": {
"g": "g",
"h": {
"i": "i"
}
}
}
}
}
Trzeci argument ustawia poziom wcięcia, więc można go dostosować zgodnie z potrzebami.
Więcej szczegółów tutaj w razie potrzeby:
Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-07 06:28:13
Kompilacja wielu przydatnych odpowiedzi z (przynajmniej) węzła.js v0.10.33
(stable) / v0.11.14
(unstable) prawdopodobnie przez (co najmniej) v7.7.4
(wersja aktualna od ostatniej aktualizacji do tej odpowiedzi). Napiwek dla Rory 'ego O' Kane ' a za jego pomoc.
Tl; dr
Aby uzyskać pożądany wynik dla przykładu w pytaniu, użyj console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Dlaczego nie util.inspect()
? Ponieważ jest już w samym sercu wyjścia diagnostycznego: console.log()
i console.dir()
oraz węzeł.js REPL użycie util.inspect()
implicite. To ogólnie Nie konieczne do require('util')
i zadzwoń util.inspect()
bezpośrednio.
Szczegóły poniżej.
-
console.log()
(i jego pseudonim,console.info()
):-
jeśli pierwszy argument nie jest ciągiem formatującym:
util.inspect()
jest automatycznie stosowany do każdego argumentu:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
- zauważ, że ty nie można przekazać opcji przez
util.inspect()
w tym przypadku, co oznacza 2 znaczące ograniczenia:- strukturalna głębokość wyjścia jest ograniczona do 2 poziomy (domyślne).
- ponieważ nie możesz tego zmienić za pomocą
console.log()
, musisz zamiast tego użyćconsole.dir()
:console.dir(myObject, { depth: null }
wydruki z nieograniczoną głębokością ; patrz poniżej.
Nie możesz włączyć kolorowania składni. - ponieważ nie możesz tego zmienić za pomocą
- strukturalna głębokość wyjścia jest ograniczona do 2 poziomy (domyślne).
-
jeśli pierwszy argument nie jest ciągiem formatującym:
-
jeśli pierwszy argument jest ciągiem formatującym (patrz niżej): używa
util.format()
wypisanie pozostałych argumentów na podstawie ciągu formatującego (patrz niżej); np.:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
- Uwaga:
- nie ma elementu zastępczego do reprezentowania obiektów
util.inspect()
-Styl. - JSON wygenerowany przez {[22] } nie jest ładnie wydrukowany.
- nie ma elementu zastępczego do reprezentowania obiektów
-
akceptuje tylko 1 argument to inspect , i zawsze stosuje się
util.inspect()
– zasadniczo, wrapper dlautil.inspect()
bez opcji domyślnie; np.:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
-
węzeł.js v0.11.14+: opcjonalny drugi argument określa opcje dla
util.inspect()
– patrz poniżej; np.:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
-
REPL: domyślnie wyświetla wartość zwracaną dowolnego wyrażenia z
util.inspect()
ze składnią kolorowanki ;
tzn. samo wpisanie nazwy zmiennej i naciśnięcie Enter wyświetli sprawdzoną wersję jej wartości; np.:o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
automatycznie ładuje obiekty I array reprezentacje , ale tworzy Wielowierszowe wyjście tylko w razie potrzeby .
Zachowanie pretty-printing może być kontrolowane przez właściwość
compact
w opcjioptions
argument;false
używa wielowierszowego wyjścia bezwarunkowo , podczas gdytrue
całkowicie wyłącza drukowanie pretty; może być również ustawiony na numer (domyślnie jest to3
) do kontrolowania warunkowego zachowania wielowierszowego-zobacz dokumenty.Domyślnie wyjście jest owinięte na około 60 znaków dzięki, Shrey , niezależnie od tego, czy wyjście jest wysyłane do pliku czy do terminala. W praktyce, od linii przerwy zdarzają się tylko na granicach właściwości , często kończy się to krótszymi liniami, ale mogą być również dłuższe (np. z długimi wartościami właściwości).
W wersji 6.3.0+ możesz użyć opcji
breakLength
, aby nadpisać limit 60 znaków; jeśli ustawisz go naInfinity
, wszystko będzie wyświetlane na pojedynczej linii.
Jeśli chcesz mieć większą kontrolę nad drukowaniem, rozważ użycie JSON.stringify()
Z trzecim argumentem , ale zwróć uwagę na po:
-
nie działa z obiektami, które mają odniesienia okrągłe , takie jak
module
W kontekście globalnym. - metody (funkcje) z założenia nie będą uwzględniane.
- nie można zdecydować się na wyświetlanie ukrytych (nieliczalnych) właściwości.
- przykładowe wywołanie:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
options object (2nd argument):
Opcjonalne opcje można przekazać obiekt, który zmienia pewne aspekty sformatowanego ciągu znaków; niektóre obsługiwane właściwości to:
Zobacz najnowszy węzeł.js docs dla aktualnej, pełnej listy.
-
showHidden
- jeśli
true
, wtedy wyświetlone zostaną również nieoznaczalne właściwości obiektu [te, które mają Nie pojawiać się podczas używaniafor keys in obj
lubObject.keys(obj)
]. Domyślnie:false
.
- jeśli
-
depth
- mówi inspect ile razy rekurencyjnie formatować obiekt. Jest to przydatne do kontroli dużych skomplikowanych obiektów. Domyślnie 2. Aby uczynić go rekurencyjnym w nieskończoność, podaj
null
.
- mówi inspect ile razy rekurencyjnie formatować obiekt. Jest to przydatne do kontroli dużych skomplikowanych obiektów. Domyślnie 2. Aby uczynić go rekurencyjnym w nieskończoność, podaj
-
colors
- jeśli true, to wyjście będzie stylizowane na kod koloru ANSI. Domyślnie
false
. Kolory są konfigurowalne [...- zobacz link].
- jeśli true, to wyjście będzie stylizowane na kod koloru ANSI. Domyślnie
-
customInspect
- if
false
, then custominspect()
funkcje zdefiniowane na sprawdzanych obiektach nie będą wywoływane. Domyślnietrue
.
- if
util.format()
format-string placeholders (1. argument)
niektóre z obsługiwanych elementów zastępczych to:
Zobacz najnowszy węzeł.js docs dla aktualnej, pełnej listy.
-
%s
– Sznurek. - {–58]} - Liczba (zarówno liczba całkowita jak i zmiennoprzecinkowa).
-
%j
– JSON. -
%%
- pojedynczy znak procentowy ('%'). To nie pochłania argumentów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-09 04:39:38
Inną prostą metodą jest przekonwertowanie go na json
console.log('connection : %j', myObject);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-15 16:05:42
Spróbuj tego:
console.dir(myObject,{depth:null})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-19 12:12:44
Od Węzła.js 6.4.0, można to elegancko rozwiązać za pomocą util.inspect.defaultOptions
:
require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 20:32:12
Być może console.dir
to wszystko, czego potrzebujesz.
Http://nodejs.org/api/console.html#console_console_dir_obj
Używa util.sprawdź na obj i wydrukuj wynikowy ciąg na stdout.
Użyj opcji util, jeśli potrzebujesz większej kontroli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-02 01:27:02
Możesz również zrobić
console.log(JSON.stringify(myObject, null, 3));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 02:27:13
Dobrym sposobem na sprawdzenie obiektów jest użycie opcji node --inspect z Chrome DevTools dla Node.
node.exe --inspect www.js
Otwórz chrome://inspect/#devices
w chrome i kliknij Otwórz dedykowane narzędzia DevTools dla węzła
Teraz każdy zalogowany obiekt jest dostępny w Inspektorze jak zwykły JS działający w chrome.
Nie ma potrzeby ponownego otwierania Inspektora, łączy się on z węzłem automatycznie po uruchomieniu lub ponownym uruchomieniu węzła. Zarówno -- inspect i Chrome DevTools for node może nie być dostępny w starszych wersjach Node i Chrome.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 11:43:23
Oba te zastosowania można zastosować:
// more compact, and colour can be applied (better for process managers logging)
console.dir(queryArgs, { depth: null, colors: true });
// get a clear list of actual values
console.log(JSON.stringify(queryArgs, undefined, 2));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-29 16:12:22
Myślę, że to może być dla Ciebie przydatne.
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(JSON.stringify(myObject, null, '\t'));
Jak wspomniano w ta odpowiedź :
JSON.stringify
's trzeci parametr definiuje wstawianie białej przestrzeni dla ładny-druk. Może to być łańcuch lub liczba (liczba spacji).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-19 04:09:17
Możesz po prostu dodać do obiektu metodę inspect()
, która nadpisze reprezentację obiektu w wiadomościach console.log
Eg:
var myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }
Następnie, Twój obiekt będzie reprezentowany zgodnie z wymaganiami w obu konsolach.log and node shell
Aktualizacja:
Obiekt.inspect został wycofany ( https://github.com/nodejs/node/issues/15549 ). użyj myObject [util.sprawdź.custom] zamiast:
const util = require('util')
var myObject = {
/* nested properties not shown */
}
myObject[util.inspect.custom] = function(){ return JSON.stringify( this, null, 4 ); }
console.log(util.inspect(myObject))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-17 06:32:22
Prostą sztuczką byłoby użycie modułu debug
do dodania DEBUG_DEPTH=null
jako zmiennej środowiskowej podczas uruchamiania skryptu
Ex.
DEBUG= * DEBUG_DEPTH = null node index.js
In you code
const debug = require('debug');
debug("%O", myObject);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-18 08:18:18
Najprostsza opcja:
console.log('%O', myObject);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 15:42:20
REPL węzła ma wbudowane rozwiązanie do nadpisywania sposobu wyświetlania obiektów, zobacz tutaj .
Moduł REPL używa wewnętrznie
util.inspect()
, podczas drukowania wartości. Jednakutil.inspect
przekazuje wywołanie do obiektuinspect()
funkcja, jeśli ją posiada.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 17:02:16
JSON.stringify ()
let myVar = {a: {b: {c: 1}}};
console.log(JSON.stringify( myVar, null, 4 ))
Świetne do głębokiej inspekcji obiektów danych. To podejście działa na zagnieżdżonych tablicach i zagnieżdżonych obiektach z tablicami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-20 00:01:55
Jeśli szukasz sposobu na pokazanie ukrytych przedmiotów w tablicy, musisz przejść maxArrayLength: Infinity
console.log(util.inspect(value, { maxArrayLength: Infinity }));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-16 11:38:47