web-dev-qa-db-fra.com

Comment obtenir l'objet complet dans le fichier console.log () de Node.js, plutôt que '[Objet]'?

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.

739
user1372449

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 .

1236
250R

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

551
user1106925

Une autre méthode simple consiste à le convertir en json

console.log('connection : %j', myObject);
51
niksmac

Essaye ça:

console.dir(myObject,{depth:null})
36
hirra

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);
_
23
silverwind

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.

19
Luke W

Vous pouvez aussi faire

console.log(JSON.stringify(myObject, null, 3));
18
Eesa

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.

enter image description here

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.

14
Ali

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

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

4
Nirav Sutariya

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.

4
harish2704

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

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 fonction inspect() de l'objet, le cas échéant.

2
Lloyd