title: In Nodejs, when I console.log a req object, what does [Circular] reference? How to determine that
body: <p>In Nodejs, when I console.log a req object, what does [Circular] mean?</p>
  
  <p>Here's an example console.log(req) against a basic nodejs example. Notice the request.socket._readWatcher.socket is a [Circular]. Does that mean it refers to itself? How can I dereference that?</p>
  
  <pre><code>{ socket: 
     { bufferSize: 0,
       fd: 7,
       type: 'tcp4',
       allowHalfOpen: true,
       _readWatcher: 
        { socket: [Circular],
          callback: [Function: onReadable] },
       destroyed: false,
       readable: true,
       _writeQueue: [],
       _writeQueueEncoding: [],
       _writeQueueFD: [],
       _writeQueueCallbacks: [],
       _writeWatcher: 
        { socket: [Circular],
          callback: [Function: onWritable] },
       writable: true,
       _writeImpl: [Function],
       _readImpl: [Function],
       _shutdownImpl: [Function],
       remoteAddress: '127.0.1.1',
       remotePort: 40407,
       server: 
        { connections: 1,
          allowHalfOpen: true,
          watcher: [Object],
          _events: [Object],
          httpAllowHalfOpen: false,
          type: 'tcp4',
          fd: 5 },
       ondrain: [Function],
       _idleTimeout: 120000,
       _idleNext: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idlePrev: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idleStart: Sun, 15 May 2011 01:18:50 GMT,
       _events: 
        { timeout: [Function],
          error: [Function],
          close: [Function] },
       ondata: [Function],
       onend: [Function],
       _httpMessage: 
        { output: [],
          outputEncodings: [],
          writable: true,
          _last: false,
          chunkedEncoding: true,
          shouldKeepAlive: true,
          useChunkedEncodingByDefault: true,
          _hasBody: true,
          _trailer: '',
          finished: false,
          socket: [Circular],
          connection: [Circular],
          _events: [Object],
          _header: 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: keep-alive\r\nTransfer-Encoding: chunked\r\n\r\n',
          _headerSent: false } },
    connection: 
     { bufferSize: 0,
       fd: 7,
       type: 'tcp4',
       allowHalfOpen: true,
       _readWatcher: 
        { socket: [Circular],
          callback: [Function: onReadable] },
       destroyed: false,
       readable: true,
       _writeQueue: [],
       _writeQueueEncoding: [],
       _writeQueueFD: [],
       _writeQueueCallbacks: [],
       _writeWatcher: 
        { socket: [Circular],
          callback: [Function: onWritable] },
       writable: true,
       _writeImpl: [Function],
       _readImpl: [Function],
       _shutdownImpl: [Function],
       remoteAddress: '127.0.1.1',
       remotePort: 40407,
       server: 
        { connections: 1,
          allowHalfOpen: true,
          watcher: [Object],
          _events: [Object],
          httpAllowHalfOpen: false,
          type: 'tcp4',
          fd: 5 },
       ondrain: [Function],
       _idleTimeout: 120000,
       _idleNext: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idlePrev: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idleStart: Sun, 15 May 2011 01:18:50 GMT,
       _events: 
        { timeout: [Function],
          error: [Function],
          close: [Function] },
       ondata: [Function],
       onend: [Function],
       _httpMessage: 
        { output: [],
          outputEncodings: [],
          writable: true,
          _last: false,
          chunkedEncoding: true,
          shouldKeepAlive: true,
          useChunkedEncodingByDefault: true,
          _hasBody: true,
          _trailer: '',
          finished: false,
          socket: [Circular],
          connection: [Circular],
          _events: [Object],
          _header: 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: keep-alive\r\nTransfer-Encoding: chunked\r\n\r\n',
          _headerSent: false } },
    httpVersion: '1.1',
    complete: false,
    headers: 
     { 'user-agent': 'curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18',
       host: 'uh-uh-uh-I-aint-telling',
       accept: '*/*' },
    trailers: {},
    readable: true,
    url: '/',
    method: 'GET',
    statusCode: null,
    client: 
     { bufferSize: 0,
       fd: 7,
       type: 'tcp4',
       allowHalfOpen: true,
       _readWatcher: 
        { socket: [Circular],
          callback: [Function: onReadable] },
       destroyed: false,
       readable: true,
       _writeQueue: [],
       _writeQueueEncoding: [],
       _writeQueueFD: [],
       _writeQueueCallbacks: [],
       _writeWatcher: 
        { socket: [Circular],
          callback: [Function: onWritable] },
       writable: true,
       _writeImpl: [Function],
       _readImpl: [Function],
       _shutdownImpl: [Function],
       remoteAddress: '127.0.1.1',
       remotePort: 40407,
       server: 
        { connections: 1,
          allowHalfOpen: true,
          watcher: [Object],
          _events: [Object],
          httpAllowHalfOpen: false,
          type: 'tcp4',
          fd: 5 },
       ondrain: [Function],
       _idleTimeout: 120000,
       _idleNext: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idlePrev: 
        { repeat: 120,
          _idleNext: [Circular],
          _idlePrev: [Circular],
          callback: [Function] },
       _idleStart: Sun, 15 May 2011 01:18:50 GMT,
       _events: 
        { timeout: [Function],
          error: [Function],
          close: [Function] },
       ondata: [Function],
       onend: [Function],
       _httpMessage: 
        { output: [],
          outputEncodings: [],
          writable: true,
          _last: false,
          chunkedEncoding: true,
          shouldKeepAlive: true,
          useChunkedEncodingByDefault: true,
          _hasBody: true,
          _trailer: '',
          finished: false,
          socket: [Circular],
          connection: [Circular],
          _events: [Object],
          _header: 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: keep-alive\r\nTransfer-Encoding: chunked\r\n\r\n',
          _headerSent: false } },
    httpVersionMajor: 1,
    httpVersionMinor: 1,
    upgrade: false }
  </code></pre>
  
  <h1>UPDATE</h1>
  
  <p>Since I apparently wasn't as clear as I could have been, how can I dereference what element is being referenced circularly? Is it always the parent element?</p>
  
  <p>Also of note, last night I learned about the Utils class, and the inspect method. Which will probably give me way more information about this than I should reasonably want to know ;)</p>