Lors du débogage avec console.log()
, comment puis-je obtenir l'objet complet?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Les 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 utiliser 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 */))
Les sorties
{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }
Voir util.inspect()
docs .
Vous pouvez utiliser JSON.stringify
et obtenir une bonne indentation ainsi qu'une syntaxe plus facile à retenir.
console.log(JSON.stringify(myObject, null, 4));
{
"a": "a",
"b": {
"c": "c",
"d": {
"e": "e",
"f": {
"g": "g",
"h": {
"i": "i"
}
}
}
}
}
Le troisième argument définit le niveau d'indentation, vous pouvez donc l'ajuster à votre guise.
Plus de détails ici si nécessaire:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
Une autre méthode simple consiste à le convertir en json
console.log('connection : %j', myObject);
Essaye ça:
console.dir(myObject,{depth:null})
Depuis Node.js 6.4.0, ceci peut être élégamment résolu avec util.inspect.defaultOptions
:
_require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
_
peut-être que console.dir
est tout ce dont vous avez besoin.
http://nodejs.org/api/console.html#console_console_dir_obj
Utilise util.inspect sur obj et imprime la chaîne résultante sur stdout.
utilisez l'option util si vous avez besoin de plus de contrôle.
Vous pouvez aussi faire
console.log(JSON.stringify(myObject, null, 3));
Un bon moyen d’inspecter les objets consiste à utiliser l’option node - inspect avec Chrome DevTools for Node .
node.exe --inspect www.js
Ouvrez chrome://inspect/#devices
dans chrome et cliquez sur pour ouvrir DevTools for Node .
À présent, tous les objets enregistrés sont disponibles dans Inspector, comme les JS classiques fonctionnant en chrome.
Il n'est pas nécessaire de rouvrir l'inspecteur, il se connecte automatiquement au nœud dès que le nœud démarre ou redémarre. - inspecter et Chrome DevTools for Node peuvent ne pas être disponibles dans anciennes versions de Node et de Chrome.
Ces deux usages peuvent être appliqués
// more compact and colour can be applied (better for process managers logging)
console.dir(queryArgs, { depth: null, colors: true });
// clear list of actual values
console.log(JSON.stringify(queryArgs, undefined, 2));
Je pense que cela pourrait être utile pour vous.
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(JSON.stringify(myObject, null, '\t'));
Comme mentionné dans cette réponse :
Le troisième paramètre de
JSON.stringify
définit l'insertion d'espaces pour une impression réussie. Ce peut être une chaîne ou un nombre (nombre d'espaces).
Vous pouvez simplement ajouter une méthode inspect()
à votre objet qui remplacera la représentation de l'objet dans les messages console.log
par exemple:
var myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }
alors, votre objet sera représenté comme requis dans les deux fichiers console.log et Shell.
Une astuce simple consisterait à utiliser le module debug
pour ajouter DEBUG_DEPTH=null
comme variable d'environnement lors de l'exécution du script.
Ex.
DEBUG = * DEBUG_DEPTH = noeud nul index.js
En ton code
const debug = require('debug');
debug("%O", myObject);
Le noeud REPL dispose d'une solution intégrée permettant de remplacer l'affichage des objets. Voir ici .
Le module REPL utilise en interne
util.inspect()
lors de l'impression de valeurs. Cependant,util.inspect
délègue l'appel à la fonctioninspect()
de l'objet, le cas échéant.