Comment puis-je obtenir l'intégralité de l'objet dans Node.js's de la console.log(), plutôt que '[Objet]'?
Lors du débogage à l'aide de console.log()
, comment puis-je obtenir l'intégralité de l'objet?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Sorties:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Mais je veux aussi voir le contenu de la propriété f
.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
util.inspect()
:Sorties
Voir
util.inspecter()
docs.v0.10.33
console.log()
implicitement s'applique àutil.inspect()
à ses arguments, en supposant que le 1er n'est pas une chaîne de format. Si vous êtes heureux avecutil.inspect()
s'options par défaut, il suffit deconsole.log(myObject)
fera - pas besoin de demander d'util
;console.dir()
fait la même chose, mais accepte seulement de l'objet à inspecter; à tout le moins auv0.11.14
, vous pouvez passer l'objet d'options pourutil.inspect()
que le 2ème argument; ma réponse a plus de détails.console.dir()
fait la même chose, mais accepte seulement de l'objet à inspecter" aurait été "... n'accepte que les un de l'objet à inspecter".console.log(obj)
elle affiche toujours [Objet] pour profondément imbriqués les objets 🙁 je souhaite vraiment qu'il allait se comporter comme vous le décrivez.util.inspect()
par défaut sans vous permettant de changer);console.dir()
a la même limite par défaut, mais vous pouvez passer un objet d'options comme le 2e argument de changement (qui est passé à traversutil.inspect()
; note queconsole.dir()
ne peut jamais print 1 objet à la fois, cependant. Pour imprimer avec un nombre illimité de profondeur, utiliserconsole.dir(myObject, { depth: null })
.util.inspect
est la bonne solution. Cliquez ici pour voir toutes les options, de styles et de couleurs aussi bien! nodejs.org/api/util.html#util_util_inspect_object_optionsconsole.dir(myObject, { depth: null })
est un travail pour moiconsole.dir(myObject, { depth: 4, colors: true }
, par exemple, est ce que j'utilise. Plus facile queutil.inspect
et a le même résultat avec le maintien des petits objets ou des tableaux sur une seule ligne et de fournir les noms de classe, des références de fonction avec leurs noms, etc), et la coloration syntaxique...Vous pouvez utiliser
JSON.stringify
, et obtenir quelques belles indentation ainsi que peut-être plus facile de se souvenir de la syntaxe.Le troisième argument définit le niveau d'indentation, de sorte que vous pouvez ajuster qui comme souhaité.
Plus de détails ici si besoin:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
JSON.stringify
est ok, mais nous considérons que ne fonctionne que surjson
structures. Si vous voulez sortir un objet javascript, cela ne fonctionnera pas dans tous les cas, tandis queutil.inspect
volonté. Aussi, pour éviter...more items
de la console.journal vous avez besoin pour passer àutil.inspect
la{ maxArrayLength: 1000 }
option, dans ce cas, imprimez jusqu'à 1000 articles dans tous les cas.console.log(JSON.stringify(myObject, null, 4));
assez cool! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Une compilation de nombreuses réponses utiles (au moins) Node.js
v0.10.33
(stable) /v0.11.14
(instable) probablement par (au moins)v7.7.4
(la version en cours de la dernière mise à jour de cette réponse).tl;dr
util.inspect()
est au cœur de diagnostic de sortie:console.log()
etconsole.dir()
ainsi que la Node.js REPL utilisationutil.inspect()
implicitement, il est donc généralement pas nécessaires pourrequire('util')
et appelutil.inspect()
directement.Pour obtenir le résultat souhaité de l'exemple dans la question:
Détails ci-dessous.
console.log()
(et son alias,console.info()
):util.inspect()
est automatiquement appliquée à chaque argument:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) //-> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
dans ce cas, ce qui implique 2 inconvénients notables:console.log()
, vous devez plutôt utiliserconsole.dir()
:console.dir(myObject, { depth: null }
imprime avec illimité profondeur; voir ci-dessous.util.format()
pour imprimer le reste des arguments basés sur la chaîne de format (voir ci-dessous); par exemple:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) //-> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
de style.%j
est PAS joli-imprimé.console.dir()
:util.inspect()
- essentiellement, un wrapper pourutil.inspect()
sans les options par défaut; par exemple:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); //Effectively the same as console.log(o) in this case.
util.inspect()
- voir ci-dessous; par exemple:console.dir({ one: 1, two: 'deux'}, { colors: true }); //node 0.11+: Prints object representation with syntax coloring.
util.inspect()
avec coloration de la syntaxe;c'est à dire, juste en tapant le nom d'une variable et appuyer sur la touche Enter imprimer un inspecté version de sa valeur; par exemple:
o = { one: 1, two: 'deux', foo: function(){} } //echoes the object definition with syntax coloring.
util.inspect()
automatiquement (et toujours) de jolies gravures objet et tableau représentations, mais produit multiligne sortie uniquement lorsque cela est nécessaire - si tout tient sur une seule ligne, à seulement 1 ligne est imprimée.Par défaut, la sortie est enveloppé à environ 60 caractères merci, Shrey
indépendamment de savoir si la sortie est envoyé à un fichier ou d'un terminal. Dans la pratique, depuis les sauts de ligne ne se produisent dans les limites de la propriété, vous allez, souvent, avec des lignes plus courtes, mais elles peuvent aussi être plus long (par exemple, avec les valeurs de propriété).
En v6.3.0+, vous pouvez utiliser le
breakLength
option pour remplacer les 60 caractères maximum; si vous le réglez àInfinity
, tout est de sortie sur un unique ligne.Si vous voulez plus de contrôle sur l'impression, pensez à utiliser
JSON.stringify()
avec un 3ème argument, mais notez les points suivants:module
dans le contexte mondial.JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); //creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
objet d'options (2e argument):source: http://nodejs.org/api/util.html#util_util_format_format
Une option options objet peut être adopté, qui modifie certains aspects de la chaîne mise en forme:
showHidden
true
, alors l'objet non énumérable propriétés [ceux désignés de ne pas apparaître lorsque vous utilisezfor keys in obj
ouObject.keys(obj)
] s'être montré trop. Par défautfalse
.depth
null
.colors
false
. Les couleurs sont personnalisables [... - voir le lien].customInspect
false
, puis personnaliser leinspect()
fonctions définies sur les objets en cours d'inspection ne sera pas appelé. Par défauttrue
.util.format()
de chaîne de formatage des espaces réservés (1er argument)source: http://nodejs.org/api/util.html#util_util_format_format
%s
- Chaîne.%d
- Nombre (deux entiers et à virgule flottante).%j
- JSON.%
- seul signe de pourcentage ('%'). Ce ne consomme pas un argument.Une autre méthode simple consiste à convertir en json
utils
🙂Essayez ceci:
Depuis Node.js 6.4.0, cela peut être élégamment résolu avec
util.inspecter.defaultOptions
:peut-être
console.dir
est tout ce dont vous avez besoin.http://nodejs.org/api/console.html#console_console_dir_obj
utilisation util option si vous avez besoin de plus de contrôle.
options
objet deutil.inspect
.util.inspect()
.Vous pouvez également faire
Un bon moyen d'inspecter des objets est d'utiliser un nœud --inspecter option avec Chrome DevTools pour le Nœud.
Ouvrir
chrome://inspect/#devices
en chrome et cliquez sur Ouvert dédié DevTools pour le NœudMaintenant, chaque objet connecté est disponible dans l'inspecteur comme un JS cours d'exécution dans le navigateur chrome.
Il n'est pas nécessaire de rouvrir inspecteur, il se connecte sur le nœud automatiquement dès que le nœud démarre ou redémarre. Les deux --inspecter et Chrome DevTools pour le Nœud peuvent ne pas être disponibles dans les versions plus anciennes de Nœud et de Chrome.
node.exe --inspect index.js
Ces deux usages peuvent être appliquées
Vous pouvez simplement ajouter un
inspect()
méthode de votre objet qui va remplacer la représentation de l'objet dansconsole.log
messagespar exemple:
ensuite, votre objet sera représenté de la manière requise dans les deux console.le journal et le nœud shell
Un truc simple serait d'utiliser
debug
un module pour ajouterDEBUG_DEPTH=null
comme une variable d'environnement lors de l'exécution du scriptEx.
DEBUG=* DEBUG_DEPTH=null nœud index.js
Dans vous code
Le nœud REPL a une solution intégrée pour annuler l'affichage des objets, voir ici.
Je pense que c'est utile pour vous.
JS: