2013-06-22 2 views
67

Das ist eine ziemlich direkte Frage, aber ich habe bei Google nichts gefunden. Ich suche nach Dokumentation auf dem Anforderungsparameter in Node.js Create Server-Funktion, aber ich konnte nichts finden.Node.js Anfrage Objektdokumentation?

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

Debugging mit JSON.stringify() gibt mir einen Fehler, dass das Objekt kreisförmig ist und das Programm stoppt. Ich habe verschiedene Dinge wie request.url oder request.body gesehen, aber gibt es eine Seite, die alle Anforderungsfunktionen und Parameter dokumentiert? Es scheint, als sollte es leicht zu finden sein, ich kann es einfach nicht finden.

Ich habe es erneut versucht, und es stellt sich heraus, gerade console.log(request) schreibt alle Daten aus der Anfrage. 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 } 
+48

Sie haben meine Sympathie. Die meisten modernen Sprachen, Bibliotheken und Frameworks haben eine erschreckende Referenzdokumentation. Wenn Sie die unten erwähnte Dokumentation zum Knoten aufrufen, werden Sie feststellen, dass es sich nicht wirklich um eine Referenz handelt. es ist eher eine Diskussion. Zum Beispiel sagt das createServer() -Dokument, dass es als Parameter "eine Funktion benötigt, die automatisch zu dem" Anfrage "-Ereignis hinzugefügt wird und" ein Webserver-Objekt "zurückgibt. Es gibt keinen Hinweis darauf, was "Typ" eines dieser Dinge ist, und sicherlich keine Verbindung zum Referenzdokument für diese Dinge. Was sind Sie? F minus für die Dokumente. – jarmod

Antwort

22

Ich bin nicht sicher, ob dies eine richtige Antwort, wie es mir einfach erscheint, aber hat man einen Blick auf http://nodejs.org/api/http.html#http_http_incomingmessage?

Anfrage ist eine Instanz des obigen Objekts. By the way, wenn Sie wollen wirklich sehen, was mit „Brute-Force“ in diesem Objekt ist man es nicht analysieren sollte, da es nicht ein JSON-String überhaupt sein, sondern so etwas wie:

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

Ich hoffe es hilft.

+0

Hoppla, ich meinte json.stringify, nicht json.parse. Ging zurück, um den for (i in request) -Ansatz zu versuchen, den Sie erwähnen, und aus irgendeinem Grund funktionierte nur console.log (request). Ich erwartete es nur zu sagen, [Objektobjekt]. Vielleicht hat es eine bestimmte toString-Funktion für die Konsole? Danke für die Antwort. – Seiche

+4

Besser noch, um zu sehen, was in einem Objekt ist, verwenden Sie util.inspect(). Util ist ein Kernmodul; Sie können einfach 'var util = require ('util');' und das 'util.inspect (obj)'. Ein grundlegendes Problem mit 'JSON.stringify()' ist, dass es sich bei zyklischen Referenzen beschweren wird. –

+1

'_readableState',' lesbar', '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

6

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

8

Nur um hinzuzufügen, als relativ 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 zu beachten, dass das rohe Request-Objekt in request.raw.req noch verfügbar ist)

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

+0

Vielen Dank viel für den Austausch der Express-API-Option. –

+0

Die Spumko-Verbindung ist unterbrochen. –

+0

Die Parse-Dokumentation ist vollständiger als die meisten: https://parse.com/docs/js/symbols/http.IncomingMessage.html –