Node.js Objektdokumentation anfordern? [geschlossen]

80

Dies ist eine ziemlich einfache Frage, aber ich habe bei Google nichts gefunden. Ich suche nach Dokumentation zum Anforderungsparameter in der Funktion "Server erstellen" von Node.js, konnte jedoch nichts finden.

http.createServer(function(request, response){
  console.log(JSON.stringify(request));
});

Das Debuggen mit JSON.stringify () gibt mir den Fehler, dass das Objekt kreisförmig ist und das Programm stoppt. Ich habe verschiedene Dinge wie request.urloder gesehen request.body, aber gibt es eine Seite, auf der alle Anforderungsfunktionen und -parameter dokumentiert sind? Es scheint so, als ob es leicht zu finden sein sollte, ich kann es einfach nicht finden.

Ich habe es erneut versucht, und es stellt sich heraus, dass nur console.log(request)alle Daten aus der Anfrage geschrieben werden. Hier ist es nur als Referenz:

ondata: [Function],
     _httpMessage:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        output: [],
        outputEncodings: [],
        writable: true,
        _last: false,
        chunkedEncoding: false,
        shouldKeepAlive: true,
        useChunkedEncodingByDefault: true,
        sendDate: true,
        _hasBody: true,
        _trailer: '',
        finished: false,
        _hangupClose: false,
        socket: [Circular],
        connection: [Circular] } },
  connection:
   { _connecting: false,
     _handle:
      { fd: null,
        writeQueueSize: 0,
        owner: [Circular],
        onread: [Function: onread],
        reading: true },
     _readableState:
      { highWaterMark: 16384,
        buffer: [],
        length: 0,
        pipes: null,
        pipesCount: 0,
        flowing: false,
        ended: false,
        endEmitted: false,
        reading: true,
        calledRead: true,
        sync: false,
        needReadable: true,
        emittedReadable: false,
        readableListening: false,
        objectMode: false,
        defaultEncoding: 'utf8',
        ranOut: false,
        awaitDrain: 0,
        readingMore: false,
        decoder: null,
        encoding: null },
     readable: true,
     domain: null,
     _events:
      { end: [Object],
        finish: [Function: onSocketFinish],
        _socketEnd: [Function: onSocketEnd],
        drain: [Function: ondrain],
        timeout: [Function],
        error: [Function],
        close: [Object] },
     _maxListeners: 10,
     _writableState:
      { highWaterMark: 16384,
        objectMode: false,
        needDrain: false,
        ending: false,
        ended: false,
        finished: false,
        decodeStrings: false,
        defaultEncoding: 'utf8',
        length: 0,
        writing: false,
        sync: true,
        bufferProcessing: false,
        onwrite: [Function],
        writecb: null,
        writelen: 0,
        buffer: [] },
     writable: true,
     allowHalfOpen: true,
     onend: [Function],
     destroyed: false,
     errorEmitted: false,
     bytesRead: 357,
     _bytesDispatched: 0,
     _pendingData: null,
     _pendingEncoding: '',
     server:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        _connections: 1,
        connections: [Getter/Setter],
        _handle: [Object],
        _usingSlaves: false,
        _slaves: [],
        allowHalfOpen: true,
        httpAllowHalfOpen: false,
        timeout: 120000,
        _connectionKey: '4:0.0.0.0:1337' },
     _idleTimeout: 120000,
     _idleNext:
      { _idleNext: [Circular],
        _idlePrev: [Circular],
        msecs: 120000,
        ontimeout: [Function: listOnTimeout] },
     _idlePrev:
      { _idleNext: [Circular],
        _idlePrev: [Circular],
        msecs: 120000,
        ontimeout: [Function: listOnTimeout] },
     _idleStart: 1371952289619,
     parser:
      { _headers: [],
        _url: '',
        onHeaders: [Function: parserOnHeaders],
        onHeadersComplete: [Function: parserOnHeadersComplete],
        onBody: [Function: parserOnBody],
        onMessageComplete: [Function: parserOnMessageComplete],
        socket: [Circular],
        incoming: [Circular],
        maxHeaderPairs: 2000,
        onIncoming: [Function] },
     ondata: [Function],
     _httpMessage:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        output: [],
        outputEncodings: [],
        writable: true,
        _last: false,
        chunkedEncoding: false,
        shouldKeepAlive: true,
        useChunkedEncodingByDefault: true,
        sendDate: true,
        _hasBody: true,
        _trailer: '',
        finished: false,
        _hangupClose: false,
        socket: [Circular],
        connection: [Circular] } },
  httpVersion: '1.1',
  complete: false,
  headers:
   { host: 'localhost:1337',
     connection: 'keep-alive',
     'cache-control': 'max-age=0',
     accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
     'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like
 Gecko) Chrome/27.0.1453.116 Safari/537.36',
     'accept-encoding': 'gzip,deflate,sdch',
     'accept-language': 'en-US,en;q=0.8,ja;q=0.6' },
  trailers: {},
  _pendings: [],
  _pendingIndex: 0,
  url: '/',
  method: 'GET',
  statusCode: null,
  client:
   { _connecting: false,
     _handle:
      { fd: null,
        writeQueueSize: 0,
        owner: [Circular],
        onread: [Function: onread],
        reading: true },
     _readableState:
      { highWaterMark: 16384,
        buffer: [],
        length: 0,
        pipes: null,
        pipesCount: 0,
        flowing: false,
        ended: false,
        endEmitted: false,
        reading: true,
        calledRead: true,
        sync: false,
        needReadable: true,
        emittedReadable: false,
        readableListening: false,
        objectMode: false,
        defaultEncoding: 'utf8',
        ranOut: false,
        awaitDrain: 0,
        readingMore: false,
        decoder: null,
        encoding: null },
     readable: true,
     domain: null,
     _events:
      { end: [Object],
        finish: [Function: onSocketFinish],
        _socketEnd: [Function: onSocketEnd],
        drain: [Function: ondrain],
        timeout: [Function],
        error: [Function],
        close: [Object] },
     _maxListeners: 10,
     _writableState:
      { highWaterMark: 16384,
        objectMode: false,
        needDrain: false,
        ending: false,
        ended: false,
        finished: false,
        decodeStrings: false,
        defaultEncoding: 'utf8',
        length: 0,
        writing: false,
        sync: true,
        bufferProcessing: false,
        onwrite: [Function],
        writecb: null,
        writelen: 0,
        buffer: [] },
     writable: true,
     allowHalfOpen: true,
     onend: [Function],
     destroyed: false,
     errorEmitted: false,
     bytesRead: 357,
     _bytesDispatched: 0,
     _pendingData: null,
     _pendingEncoding: '',
     server:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        _connections: 1,
        connections: [Getter/Setter],
        _handle: [Object],
        _usingSlaves: false,
        _slaves: [],
        allowHalfOpen: true,
        httpAllowHalfOpen: false,
        timeout: 120000,
        _connectionKey: '4:0.0.0.0:1337' },
     _idleTimeout: 120000,
     _idleNext:
      { _idleNext: [Circular],
        _idlePrev: [Circular],
        msecs: 120000,
        ontimeout: [Function: listOnTimeout] },
     _idlePrev:
      { _idleNext: [Circular],
        _idlePrev: [Circular],
        msecs: 120000,
        ontimeout: [Function: listOnTimeout] },
     _idleStart: 1371952289619,
     parser:
      { _headers: [],
        _url: '',
        onHeaders: [Function: parserOnHeaders],
        onHeadersComplete: [Function: parserOnHeadersComplete],
        onBody: [Function: parserOnBody],
        onMessageComplete: [Function: parserOnMessageComplete],
        socket: [Circular],
        incoming: [Circular],
        maxHeaderPairs: 2000,
        onIncoming: [Function] },
     ondata: [Function],
     _httpMessage:
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        output: [],
        outputEncodings: [],
        writable: true,
        _last: false,
        chunkedEncoding: false,
        shouldKeepAlive: true,
        useChunkedEncodingByDefault: true,
        sendDate: true,
        _hasBody: true,
        _trailer: '',
        finished: false,
        _hangupClose: false,
        socket: [Circular],
        connection: [Circular] } },
  _consuming: false,
  _dumped: false,
  httpVersionMajor: 1,
  httpVersionMinor: 1,
  upgrade: false }
Benjamin Collins
quelle
54
Du hast mein Mitgefühl. Die meisten modernen Sprachen, Bibliotheken und Frameworks verfügen über eine erschreckende Referenzdokumentation. Wenn Sie die unten genannte Knotendokumentation besuchen, werden Sie feststellen, dass es sich überhaupt nicht um eine Referenz handelt. Es ist eher eine Diskussion. Das Dokument createServer () gibt beispielsweise an, dass es als Parameter "eine Funktion verwendet, die automatisch zum Ereignis 'request' hinzugefügt wird" und "ein Webserverobjekt" zurückgibt. Es gibt keinen Hinweis darauf, welcher Typ eines dieser Dinge ist, und sicherlich keinen Link zum Referenzdokument für diese Dinge. Was sind Sie? F minus für die Dokumente.
Jarmod
1
Ich habe die Frage durchgelesen und sie scheint mir ziemlich vernünftig zu sein. Das Problem hierbei ist, dass es die Antworten sind, die dies von einer Frage zu einer Gesprächs- / Mitleidsparty über schreckliche Dokumentation geführt haben. Wenn eine vernünftige Antwort / Erklärung gegeben werden könnte, denke ich, dass diese Frage rettbar ist. Vielleicht ist sogar eine neue, verwandte Frage am besten.
Demongolem
Ich habe diese Frage vor 6 Jahren gestellt. Seitdem habe ich viel mehr Erfahrung mit dem Lesen der Nodejs-Dokumentation gesammelt, und wer jemals an der Nodejs-Dokumentation arbeitet, hat enorme Arbeit geleistet, um sie auf dem neuesten Stand und genau zu halten. Ich denke, diese Frage hat viel Aufmerksamkeit erhalten, weil es sich um eine einfache Frage handelt, aber sie zeigt, dass über console.log viele Informationen verfügbar sind, falls Sie an etwas hängen bleiben.
Benjamin Collins

Antworten:

26

Ich bin mir nicht sicher, ob dies eine korrekte Antwort ist, da sie mir unkompliziert erscheint. Haben Sie sich jedoch http://nodejs.org/api/http.html#http_http_incomingmessage angesehen ?

Die Anforderung ist eine Instanz des obigen Objekts. Übrigens, wenn Sie wirklich mit "Brute Force" sehen möchten, was sich in diesem Objekt befindet, sollten Sie es nicht analysieren, da es sich überhaupt nicht um eine JSON-Zeichenfolge handelt, sondern um Folgendes:

for (i in request) {
  //Your code here
}

Ich hoffe es hilft.

Delio
quelle
Ups, ich meinte json.stringify, nicht json.parse. Ging zurück, um den von Ihnen erwähnten for (i in request) -Ansatz zu versuchen, und aus irgendeinem Grund funktionierte es einfach, nur console.log (request) auszuführen. Ich habe erwartet, dass es nur [Objekt Objekt] sagt. Vielleicht hat es eine spezielle toString-Funktion für die Konsole? Danke für die Antwort.
Benjamin Collins
5
Besser noch, um zu sehen, was sich in einem Objekt befindet, verwenden Sie util.inspect (). Util ist ein Kernmodul; Sie können einfach var util=require('util');und die util.inspect(obj). Ein grundlegendes Problem JSON.stringify()ist, dass es sich beschwert, wenn es zyklische Referenzen gibt.
Thalis K.
2
_readableState, readable, domain, _events, _maxListeners, socket, connection, httpVersion, complete, headers, trailers, _pendings, _pendingIndex, url, method, statusCode, client, _consuming, _dumped, httpVersionMajor, httpVersionMinor, upgrade, setTimeout, read, _read, destroy, _addHeaderLine, _dump, push, unshift, setEncoding, pipe, unpipe, on, addListener, resume, pause, wrap, setMaxListeners, emit, once, removeListener, removeAllListeners,listeners
CaffeineAddiction
10

Nur als relativer Neuling in Node.js finde ich es verwirrend, dass jedes Framework seine eigene Implementierung eines "Anfrage" -Objekts hat.

Zum Beispiel,

Express: http://expressjs.com/api.html#req.param

und

Hapi: http://spumko.github.io/resource/api/#request-object (nur um zu beachten, dass das unformatierte Anforderungsobjekt in request.raw.req noch verfügbar ist)

Einige Bibliotheken setzen das Vorhandensein der Express-Methode "req.param" voraus und schlagen fehl, wenn sie in Nicht-Express-Projekten verwendet werden.

shaunlim
quelle
Vielen Dank, dass Sie die Express-API-Option geteilt haben.
Muhammad Raihan Muhaimin
Die Spumko-Verbindung ist unterbrochen.
Charles Holbrow
Die Analyse der
Analyse
Diese Analyse-URL ist 404, fwiw
Jon Biz
Warum sollten Sie jemals ein http "Framework" verwenden? Node.js führt http nativ aus.
BT
6

Ich stimme Delio zu, das Request-Objekt ist vom Typ IncomingMessage-Objekt, das von http.ClientRequest erstellt wird.

Frederick G. Sandalo
quelle