ProgramingTip

Node.js의 console.log ()에서 '[Object]'대신 전체 객체를 얻으려면 어떻게해야합니까?

bestdevel 2020. 9. 29. 08:10
반응형

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 }인쇄합니다 . 아래를 참조하십시오.
        • 구문 색상 지정을 켤 수 없습니다.
    • 첫 번째 인수가 형식 문자열 인 경우 (아래 참조) : 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(){} } // 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입니다. 무기한 반복되도록하려면을 전달 합니다.
  • colors
    • true 인 경우 출력은 ANSI 색상 코드로 스타일이 지정됩니다. 기본값은 false. 색상은 사용자 정의 할 수 있습니다 [...-링크 참조].
  • 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와 같은 인스펙터에서 사용할 수 있습니다.

여기에 이미지 설명 입력

인스펙터를 다시 열 필요가 없으며 노드가 시작되거나 다시 시작되는 즉시 자동으로 노드에 연결됩니다. --inspectChrome 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);

참고 URL : https://stackoverflow.com/questions/10729276/how-can-i-get-the-full-object-in-node-jss-console-log-rather-than-object

반응형