2013-06-22 21 views
67

Bu oldukça basit bir soru ama Google'da hiçbir şey bulamadım. Node.js'in sunucu işlevini oluştururken istek parametresiyle ilgili belgeleri arıyorum, ancak hiçbir şey bulamadım. Nesne daireseldir ve program durur JSON.stringify() ileNode.js istek nesne kataloğu?

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

ayıklama, bana bir hata verir. request.url veya request.body gibi farklı şeyler gördüm, ancak tüm istek işlevlerini ve parametrelerini belgeleyen bir sayfa var mı? Bulması kolay olmalı gibi görünüyor, sadece onu bulamıyorum.

Yeniden denedim ve bu sadece console.log(request) yapılıyorsa tüm veriler istekte yazıyor. Bunun bana basit göründüğü gibi doğru bir cevap olmakla birlikte, http://nodejs.org/api/http.html#http_http_incomingmessage de bakabilirsiniz eğer emin değilim

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

Benim sempatim var. En modern diller, kütüphaneler ve çerçeveler, referans belgelerini korkunç bulmaktadır. Aşağıda belirtilen düğüm dokümanı ziyaret ederseniz, aslında bir referans olmadığını göreceksiniz; daha çok bir tartışma. Örneğin, createServer() belgesi, "'request' olayı için otomatik olarak eklenen bir işlev" parametresini aldığını ve "bir web sunucusu nesnesini" döndürdüğünü belirtir. Bunlardan ne 'tip' olduğuna dair hiçbir ipucu yoktur ve bu şeyler için referans dokümana kesinlikle bir bağlantı yoktur. Onlar neler? Dokümanlar için F eksi. – jarmod

cevap

22

: Burada sadece bir referans olarak nedir?

İstek, yukarıdaki nesnenin örneğidir.

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

: Bu arada, gerçekten "kaba kuvvet" olarak görünüyorsa hiç bir JSON dize olmayacak şekilde, bunu ayrıştırmak, ancak bunun yerine böyle bir şey yapmaması gereken ile o nesnenin içinde ne görmek istiyorsanız Umarım yardımcı olur.

+0

Oops, json.stringify demek istedim, json.parse değil. İstediğiniz (istek üzerine) yaklaşımını denemek için geri döndüm ve bir sebepten dolayı, sadece konsol.log (istek) çalışmayı bitirdi. Sadece dedim ki, [Object object]. Belki konsol için belirli bir toString işlevi var? Cevap için teşekkürler. – Seiche

+4

Daha da iyisi, herhangi bir nesnenin içinde ne olduğunu görmek için util.inspect() öğesini kullanın. Util çekirdek bir modüldür; basitçe 'var util = require (' util ')' ve 'util.inspect (obj)' komutunu kullanabilirsiniz. JSON.stringify() 'ile ilgili temel bir sorun, döngüsel referanslar varsa şikayet edeceğidir. –

+1

'_readableState',' readable', 'alam,' _events', '_maxListeners',' socket', 'connection',' httpVersion', 'complete',' headers', 'trailers',' _pendings', ' _pendingIndex', 'url',' method', 'statusCode',' client', '_consuming',' _dumped', 'httpVersionMajor',' httpVersionMinor', ​​'upgrade',' setTimeout', 'Oku', '_read' , "yok", "_addHeaderLine", "_dump", "push", "unshift", "setEncoding", "pipe", "unpipe", "on", "addListener", "resume", "pause", " wrap', 'setMaxListeners',' emit', 'once',' removeListener', 'removeAllListeners',' dinleyicileri ' – CaffeineAddiction

6

Delio ile aynı fikirdeyim. Request nesnesi, http.ClientRequest tarafından oluşturulan IncomingMessage nesnesine aittir.

8

Node.js'de göreceli bir yeni kullanıcı olarak eklemek için, her çerçevenin kendi kendine bir "istek" nesnesi uygulaması olduğunu hatırlatıyorum. Örneğin

,

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

ve

Hapi: http://spumko.github.io/resource/api/#request-object

Bazı (sadece ham istek nesne hala request.raw.req mevcut olduğuna dikkat etmek) kütüphaneler Express '"req.param" yönteminin varlığını varsayar ve Ekspres olmayan projelerde kullanıldığında başarısız olur.

+0

Teşekkür ederim çok ekspres API seçeneği paylaşmak için çok. –

+0

Spumko bağlantısı bozuldu. FWIW –

+0

ayrıştırma belgeleri en fazla tamamlandıktan? Node.js http yerel olarak yapar. –