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
の内容も見たいと思います。
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 を参照してください。
あなたは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
別の簡単な方法はそれをjsonに変換することです。
console.log('connection : %j', myObject);
これを試して:
console.dir(myObject,{depth:null})
Node.js 6.4.0以降、これは util.inspect.defaultOptions
でエレガントに解決できます。
require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
またすることができます
console.log(JSON.stringify(myObject, null, 3));
おそらくconsole.dir
だけが必要です。
http://nodejs.org/api/console.html#console_console_dir_obj
Objに対してutil.inspectを使用し、結果の文字列を標準出力に出力します。
さらに制御が必要な場合はutilオプションを使用してください。
オブジェクトを調べる良い方法は、node - inspectオプションとChrome DevTools for Nodeを一緒に使用することです。
node.exe --inspect www.js
クロムでchrome://inspect/#devices
を開き、をクリックします。ノード専用のDevToolsを開く
ログに記録されたすべてのオブジェクトは、通常のクロムで実行されているJSのようにインスペクタで利用できます。
インスペクタを再度開く必要はありません。ノードが起動または再起動するとすぐに自動的にノードに接続します。 - との両方のChrome DevTools for Nodeは、古いバージョンのNodeとChromeでは使用できない場合があります。
これらの使用法は両方とも適用することができます
// 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));
あなたのオブジェクトに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の両方で必要に応じて表現されます。
簡単なトリックは、スクリプトを実行するときにdebug
モジュールを使用して環境変数としてDEBUG_DEPTH=null
を追加することです
例.
DEBUG = * DEBUG_DEPTH = nullノードindex.js
あなたのコードで
const debug = require('debug');
debug("%O", myObject);
ノードREPLには、オブジェクトの表示方法をオーバーライドするための組み込みソリューションがあります。ここで を参照してください 。
値を印刷するとき、REPLモジュールは内部的に
util.inspect()
を使用します。ただし、util.inspect
は、その呼び出しをオブジェクトのinspect()
関数(ある場合)に委任します。
私はあなたにとって役に立つと思います。
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(JSON.stringify(myObject, null, '\t'));