[javascript] ‘[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
.
답변
당신이 사용해야합니다 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"
}
}
}
}
}
세 번째 인수는 들여 쓰기 수준을 설정하므로 원하는대로 조정할 수 있습니다.
필요한 경우 여기에 자세한 내용이 있습니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
답변
(적어도) Node.js v0.10.33
(안정적) / v0.11.14
(안정적이지 않음) v7.7.4
( 적어도) (이 답변에 대한 최신 업데이트 시점의 현재 버전 )에서 많은 유용한 답변을 편집 했습니다 . 그의 도움 을 위해 Rory O’Kane 의 모자 팁 .
tl; dr
질문의 예제에 원하는 결과를 얻으려면 다음을 사용하십시오 console.dir()
.
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
왜 안돼 util.inspect()
? 이 진단 출력의 중심에 이미 있기 때문에 : console.log()
및 console.dir()
뿐만 아니라 Node.js를 REPL 사용 util.inspect()
암시 . 일반적으로 직접 호출 할 필요는 없습니다require('util')
util.inspect()
.
자세한 내용은 아래를 참조하십시오.
-
console.log()
(및 그 별칭console.info()
) :- 첫 번째 인수가 형식 문자열 아닌 경우 :
util.inspect()
자동으로 모든 인수에 적용된다 :o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
- 당신이 있습니다 옵션을 전달할 수 없습니다 통해
util.inspect()
2 주목할만한 한계를 의미한다이 경우에 :- 출력의 구조적 깊이 는 2 레벨 (기본값)로 제한됩니다 .
- 이 값을 변경할 수 없으므로
console.log()
대신 다음을 사용해야합니다console.dir()
. 무제한 깊이로console.dir(myObject, { depth: null }
인쇄 ; 아래를 참조하십시오.
- 이 값을 변경할 수 없으므로
- 구문 색상 표시를 켤 수 없습니다.
- 출력의 구조적 깊이 는 2 레벨 (기본값)로 제한됩니다 .
- 첫 번째 인수가 형식 문자열 인 경우 (아래 참조) :
util.format()
형식 문자열을 기준으로 나머지 인수를 인쇄하는 데 사용 합니다 (아래 참조). 예 :o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
- 노트 :
- 객체
util.inspect()
스타일 을 나타내는 자리 표시자는 없습니다 . - 로 생성 된 JSON
%j
은 인쇄되지 않습니다.
- 객체
- 첫 번째 인수가 형식 문자열 아닌 경우 :
-
- 검사 할 인수는 1 개만 허용 하며 기본적으로 옵션이없는
util.inspect()
래퍼는 항상 적용됩니다util.inspect()
. 예 :o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
- Node.js v0.11.14 + : 선택적 두 번째 인수는 옵션을
util.inspect()
지정합니다 ( 아래 참조). 예 :console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
- 검사 할 인수는 1 개만 허용 하며 기본적으로 옵션이없는
- REPL : 구문 채색을 사용
util.inspect()
하여 모든 표현식의 반환 값을 암시 적으로 인쇄합니다 .
즉, 변수 이름을 입력하고 Enter 키를 누르면 검사 된 버전의 값이 인쇄됩니다. 예 :o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
객체 와 배열 표현을 자동으로 인쇄 하지만 필요할 때만 여러 줄로 출력합니다 .
-
pretty-printing 동작은
compact
선택적options
인수 의 속성 으로 제어 할 수 있습니다 . 복 수행false
출력을 무조건 으로 사용하지만,true
예쁜 인쇄를 무효로합니다. 조건부 다중 행 동작을 제어 하기 위해 숫자 (기본값3
)로 설정할 수도 있습니다 ( 문서 참조) . -
기본적으로 출력은
파일 또는 터미널로 전송되는지 여부에 관계없이 Shrey 덕분 에 약 60 자로 줄 바꿈 됩니다 . 실제로 줄 바꿈은 속성 경계에서만 발생하기 때문에 줄이 더 짧아 지지만 줄이 더 길 수도 있습니다 (예 : 속성 값이 길 경우). -
v6.3.0 +에서는이
breakLength
옵션을 사용 하여 60 자 제한을 무시할 수 있습니다 . 로 설정하면Infinity
모든 것이 단일 라인으로 출력됩니다 .
예쁜 인쇄에 대해 더 많은 제어를 원한다면 JSON.stringify()
3rd argument와 함께 사용 하는 것을 고려 하지만 다음 사항에 유의하십시오.
- 전역 컨텍스트에서 와 같이 순환 참조 가있는 객체로는 실패 합니다
module
. - 방법 (기능)은 의도적으로 포함되지 않습니다.
- 숨겨진 (열거 가능하지 않은) 속성을 표시하도록 선택할 수 없습니다.
- 호출 예 :
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
옵션 객체 (두 번째 인수) :
형식화 된 문자열의 특정 측면을 변경 하는 선택적 옵션 오브젝트가 전달 될 수 있습니다. 지원되는 속성 중 일부 는 다음과 같습니다.
현재 전체 목록 은 최신 Node.js 문서 를 참조하십시오 .
-
showHidden
- 인 경우
true
객체의 열거 할 수없는 속성 [for keys in obj
또는 사용할 때 표시되지 않도록 지정된 속성Object.keys(obj)
]도 표시됩니다. 기본값은false
입니다.
- 인 경우
-
depth
- 개체의 서식을 지정하는 동안 되풀이 횟수를 검사합니다. 이것은 복잡한 대형 객체를 검사하는 데 유용합니다. 기본값은 2
null
입니다. 무기한으로 되풀이하려면을 전달하십시오 .
- 개체의 서식을 지정하는 동안 되풀이 횟수를 검사합니다. 이것은 복잡한 대형 객체를 검사하는 데 유용합니다. 기본값은 2
-
colors
- true 인 경우 출력은 ANSI 색상 코드로 스타일이 지정됩니다. 기본값은
false
입니다. 색상을 사용자 정의 할 수 있습니다 [… – 링크 참조].
- true 인 경우 출력은 ANSI 색상 코드로 스타일이 지정됩니다. 기본값은
-
customInspect
- 인 경우 검사중인 객체에 정의 된
false
사용자 정의inspect()
함수가 호출되지 않습니다. 기본값은true
입니다.
- 인 경우 검사중인 객체에 정의 된
util.format()
형식 문자열 자리 표시 자 (첫 번째 인수)
지원되는 자리 표시 자 중 일부 는 다음과 같습니다.
현재 전체 목록 은 최신 Node.js 문서 를 참조하십시오 .
%s
– 문자열.%d
– 숫자 (정수 및 부동 수).%j
– JSON.%%
– 단일 퍼센트 부호 ( ‘%’). 이것은 인수를 소비하지 않습니다.
답변
또 다른 간단한 방법은 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.dir
당신이 필요한 전부일 것 입니다.
http://nodejs.org/api/console.html#console_console_dir_obj
obj에서 util.inspect를 사용하고 결과 문자열을 stdout에 인쇄합니다.
더 많은 제어가 필요한 경우 util 옵션을 사용하십시오.