console.log가 복잡한 객체에서 잘 재생되도록 하는 트릭

console.log는 많은 상황에서 유용합니다(하지만 그것이 당신이 하는 일이라면 usually better ways to debug이 있습니다)

브라우저console.log는 개체와 잘 작동하므로 필요한 만큼 드릴다운할 수 있습니다. 그러나 Node.js에서 중첩 객체의 출력을 보면 종종 다음과 같은 내용을 볼 수 있습니다.

$ console.log({a: {b: { c: {d: {}}}}})

{ a: { b: { c: [Object] } } }

d: {}[Object]로 대체되었습니다. 하지만 왜?

명령줄/터미널에는 드릴다운을 위한 멋진 UI가 없기 때문에 Node는 최대 3단계까지 인쇄를 시도합니다. 세 가지 수준을 넘어서면 [Object] 만 인쇄됩니다.

이것은 depth 라는 노드 'util' 모듈의 변수에 의해 제어되며, 기본값은 2 입니다. 여기에서 직접 설정할 수 있습니다.

require('util').inspect.defaultOptions.depth = 0; // top level only, e.g.:
// { a: [Object] }
require('util').inspect.defaultOptions.depth = null; // print everything, e.g.: 
// {
//  a: { b: { c: { d: {} } } }
// }


나중에 다시 물릴 수 있으므로 기본 변수를 변경하는 것은 좋은 생각이 아닙니다. 따라서 더 깨끗한 방법은 JSON 개체를 string로 변환하고 기록하는 것입니다. 노드의 내장 JSON 클래스와 stringify 메서드를 사용할 수 있습니다.

complexObject = {a: {b: { c: {d: {}}}}}
console.log(JSON.stringify(complexObject, null, 2))

// {
//   "a": {
//     "b": {
//       "c": {
//         "d": {}
//       }
//     }
//   }
// }

JSON.stringify , Number 2 의 세 번째 매개변수는 들여쓰기의 공백 수를 제어하고 두 번째 매개변수는 표시된 개체 및 속성을 필터링하거나 조정하는 데 사용할 수 있습니다.

이제 그 깊은 물체에 무엇이 들어 있는지 실제로 볼 수 있습니다.

좋은 웹페이지 즐겨찾기