web-dev-qa-db-ja.com

'[Object]'ではなく、Node.jsのconsole.log()で完全なオブジェクトを取得する方法を教えてください。

console.log()を使ってデバッグするとき、どうやって完全なオブジェクトを取得できますか?

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};    
console.log(myObject);

出力:

{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }

しかし、私はプロパティfの内容も見たいと思います。

710
user1372449

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 */))

アウトプット

{ a: 'a',  b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }

util.inspect() docs を参照してください。

1186
250R

あなたはJSON.stringifyを使うことができて、そしておそらく覚えやすい構文と同様にいくつかのいい字下げを得ることができます。

console.log(JSON.stringify(myObject, null, 4));

{
    "a": "a",
    "b": {
        "c": "c",
        "d": {
            "e": "e",
            "f": {
                "g": "g",
                "h": {
                    "i": "i"
                }
            }
        }
    }
}

3番目の引数は字下げレベルを設定するので、必要に応じて調整できます。

必要に応じてここにもっと詳細:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

532
user1106925

別の簡単な方法はそれをjsonに変換することです。

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

これを試して:

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

Node.js 6.4.0以降、これは util.inspect.defaultOptions でエレガントに解決できます。

require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
21
silverwind

またすることができます

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

おそらくconsole.dirだけが必要です。

http://nodejs.org/api/console.html#console_console_dir_obj

Objに対してutil.inspectを使用し、結果の文字列を標準出力に出力します。

さらに制御が必要な場合はutilオプションを使用してください。

18
Luke W

オブジェクトを調べる良い方法は、node - inspectオプションとChrome DevTools for Nodeを一緒に使用することです。

node.exe --inspect www.js

クロムでchrome://inspect/#devicesを開き、をクリックします。ノード専用のDevToolsを開く

ログに記録されたすべてのオブジェクトは、通常のクロムで実行されているJSのようにインスペクタで利用できます。

enter image description here

インスペクタを再度開く必要はありません。ノードが起動または再起動するとすぐに自動的にノードに接続します。 - の両方のChrome DevTools for Nodeは、古いバージョンのNodeとChromeでは使用できない場合があります。

13
Ali

これらの使用法は両方とも適用することができます

// 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

あなたのオブジェクトにinspect()メソッドを追加するだけで、console.logメッセージ内のオブジェクトの表現を上書きすることができます。

例えば:

var myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }

そうすれば、あなたのオブジェクトはconsole.logとnode Shellの両方で必要に応じて表現されます。

4
harish2704

簡単なトリックは、スクリプトを実行するときにdebugモジュールを使用して環境変数としてDEBUG_DEPTH=nullを追加することです

例.

DEBUG = * DEBUG_DEPTH = nullノードindex.js

あなたのコードで

const debug = require('debug');
debug("%O", myObject);
3
Chintan

ノードREPLには、オブジェクトの表示方法をオーバーライドするための組み込みソリューションがあります。ここで を参照してください

値を印刷するとき、REPLモジュールは内部的にutil.inspect()を使用します。ただし、util.inspectは、その呼び出しをオブジェクトのinspect()関数(ある場合)に委任します。

2
Lloyd

私はあなたにとって役に立つと思います。

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};

console.log(JSON.stringify(myObject, null, '\t'));
0
Nirav Sutariya