Node.js의 console.log ()에서 '[Object]'대신 전체 객체를 얻으려면 어떻게해야합니까?
를 사용하여 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()
문서를 참조하십시오 .
을 사용할 수있는 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
(stable) / v0.11.14
(unstable)에서 (적어도) v7.7.4
(이 답변에 대한 최신 업데이트 현재 버전 )을 통해 ( 제공) 많은 유용한 답변을 편집합니다 .
tl; 박사
util.inspect()
: 진단 출력의 핵심입니다 console.log()
및 console.dir()
뿐만 아니라 Node.js를 REPL 사용 util.inspect()
암시 적으로는 일반적으로 그래서, 하지 에 필요한 require('util')
및 전화 util.inspect()
직접 .
질문의 예제에 대해 원하는 출력을 얻으려면 :
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
아래 세부 정보.
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
은 예쁘게 인쇄되지 않습니다.
- 개체
- 첫 번째 인수가 형식이 아닌 경우 :
console.dir()
:- 검사 할 인수를 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(){} } // echoes the object definition with syntax coloring.
util.inspect()
자동 (변함없이) 프리티 지문 객체 및 배열 표현 하지만 생산 여러 필요할 때만 출력 - 하나 개의 라인에있는 모든 근사화는 단지 1 라인을 프린트하는 경우.
기본적으로 출력이 파일 또는 터미널로 전송되는지 여부에 관계없이 Shrey 덕분에 출력은 약 60 자로 래핑 됩니다 . 실제로 줄 바꿈은 속성 경계에서만 발생 하므로 줄이 더 짧아 지지만 더 길 수도 있습니다 (예 : 속성 값이 길어짐).
v6.3.0 +에서는
breakLength
옵션을 사용 하여 60 자 제한을 무시할 수 있습니다 . 로 설정하면Infinity
모든 것이 한 줄 에 출력됩니다 .
pretty-printing을 더 많이 제어하려면 JSON.stringify()
세 번째 인수와 함께 사용 하는 것이 좋습니다 .하지만 다음 사항에 유의하세요.
- 전역 컨텍스트에서 와 같이 순환 참조 가있는 개체에서 실패 합니다
module
. - 방법 (기능)은 의도적으로 포함되지 않습니다.
- 숨겨진 (열거 할 수없는) 속성을 표시하도록 선택할 수 없습니다.
- 통화 예 :
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
옵션 객체 (두 번째 인수) :
출처 : http://nodejs.org/api/util.html#util_util_format_format
형식화 된 문자열의 특정 측면을 변경 하는 선택적 옵션 개체를 전달할 수 있습니다.
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()
형식 문자열 자리 표시 자 (첫 번째 인수)
출처 : http://nodejs.org/api/util.html#util_util_format_format
%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 옵션을 사용하십시오.
당신은 또한 할 수 있습니다
console.log(JSON.stringify(myObject, null, 3));
객체를 검사하는 좋은 방법 은 Node 용 Chrome DevTools에서 node --inspect 옵션 을 사용하는 것 입니다.
node.exe --inspect www.js
열기 chrome://inspect/#devices
크롬에서 클릭 노드에 대한 열기 전용 DevTools로
이제 모든 로깅 된 객체는 크롬에서 실행되는 일반 JS와 같은 인스펙터에서 사용할 수 있습니다.
인스펙터를 다시 열 필요가 없으며 노드가 시작되거나 다시 시작되는 즉시 자동으로 노드에 연결됩니다. --inspect 및 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 및 노드 셸 모두에서 필요에 따라 표시됩니다.
나는 이것이 당신에게 유용 할 것이라고 생각합니다.
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(JSON.stringify(myObject, null, '\t'));
이 답변 에서 언급했듯이 :
JSON.stringify
의 세 번째 매개 변수는 예쁜 인쇄를위한 공백 삽입을 정의합니다. 문자열 또는 숫자 (공백 수) 일 수 있습니다.
간단한 트릭은 스크립트를 실행할 때 debug
모듈을 사용 DEBUG_DEPTH=null
하여 환경 변수 로 추가 하는 것입니다.
전의.
DEBUG = * DEBUG_DEPTH = null 노드 index.js
당신 코드에서
const debug = require('debug');
debug("%O", myObject);
노드 REPL에는 객체가 표시되는 방식을 재정의하기위한 기본 제공 솔루션이 있습니다 . 여기를 참조 하십시오 .
REPL 모듈은
util.inspect()
값을 인쇄 할 때 내부적으로를 사용 합니다. 그러나util.inspect
객체의inspect()
함수 (있는 경우)에 호출을 위임합니다 .
가장 쉬운 옵션 :
console.log('%O', myObject);
'ProgramingTip' 카테고리의 다른 글
WebSockets vs. Server-Sent 이벤트 / EventSource (0) | 2020.09.29 |
---|---|
Visual Studio에서 전체 디렉터리 구조를 "기존 항목 추가"어디에서 있습니까? (0) | 2020.09.29 |
Haskell 시작하기 (0) | 2020.09.29 |
GitHub 리포지토리에 태그 만들기 (0) | 2020.09.29 |
하나 이상의 항목에 대한 유효성 검사에 실패했습니다. (0) | 2020.09.29 |