[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 }인쇄 ; 아래를 참조하십시오.
        • 구문 색상 표시를 켤 수 없습니다.
    • 첫 번째 인수가 형식 문자열 인 경우 (아래 참조) : 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.
  • 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입니다. 무기한으로 되풀이하려면을 전달하십시오 .
  • colors

    • true 인 경우 출력은 ANSI 색상 코드로 스타일이 지정됩니다. 기본값은 false입니다. 색상을 사용자 정의 할 수 있습니다 [… – 링크 참조].
  • 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 옵션을 사용하십시오.