Node.js запитувати об'єктну документацію? [зачинено]


80

Це досить пряме запитання, але я нічого не знайшов у Google. Я шукаю документацію щодо параметра запиту у функції створення сервера Node.js, але мені не вдалося нічого знайти.

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

Налагодження за допомогою JSON.stringify () видає мені помилку, що об'єкт круговий і програма зупиняється. Я бачив різні речі, наприклад request.url, або request.body, але чи є сторінка, в якій зафіксовано всі функції та параметри запиту? Здається, це повинно бути легко знайти, я просто не можу знайти.

Я спробував це ще раз, і виявляється, що просто console.log(request)виписую всі дані із запиту. Тут це просто як посилання:

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 }

54
Ви маєте мою симпатію. Більшість сучасних мов, бібліотек та фреймворків мають жахливу довідкову документацію. Якщо ви відвідаєте документацію до вузла, згадану нижче, ви виявите, що насправді це взагалі не посилання; це більше дискусія. Наприклад, файл createServer () каже, що він приймає за параметр "функцію, яка автоматично додається до події" запиту "" і повертає "об'єкт веб-сервера". Немає натяку на те, що таке „тип” будь-якої з цих речей, і, звичайно, немає посилання на посилальний документ для цих речей. Хто вони? F мінус для документів.
жармод

1
Я прочитав питання, і воно мені здається цілком обґрунтованим. Проблема тут полягає в тому, що саме відповіді перенесли це питання із розмови / жалюгідної сторони на жахливу документацію. Якщо можна дати розумну відповідь / пояснення, я вважаю, що це питання можна виправити. Можливо, найкраще навіть нове, пов’язане з цим питання.
demongolem

Я поставив це питання 6 років тому. З тих пір я отримав набагато більше досвіду з читанням документації Nodejs, і той, хто коли-небудь працював над документацією Nodejs, провів надзвичайну роботу з її оновлення та точності. Я думаю, що це питання привернуло багато уваги, оскільки це просте запитання, але воно показує, що через console.log є багато інформації, на випадок, якщо ви на чомусь застрягли.
Бенджамін Коллінз,

Відповіді:


26

Я не впевнений, що це правильна відповідь, оскільки вона мені здається прямолінійною, але чи заглянули Ви на http://nodejs.org/api/http.html#http_http_incomingmessage ?

Запит є екземпляром вищевказаного об’єкта. До речі, якщо ви дійсно хочете побачити, що знаходиться всередині цього об'єкта з "грубою силою", вам не слід аналізувати його, оскільки це зовсім не буде рядок JSON, а натомість зробіть щось на зразок:

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

Сподіваюся, це допоможе.


На жаль, я мав на увазі json.stringify, а не json.parse. Повернувся назад, щоб спробувати підхід for (i in request), про який ви згадали, і з якихось причин просто виконання console.log (запит) закінчило роботу. Я очікував, що це просто скаже: [Об’єкт об’єкта]. Можливо, у нього є спеціальна функція toString для консолі? Дякую за відповідь.
Бенджамін Коллінз,

5
А ще краще, щоб побачити, що знаходиться всередині будь-якого об'єкта, використовуйте util.inspect (). Util - основний модуль; Ви можете просто var util=require('util');і util.inspect(obj). Основна проблема JSON.stringify()полягає в тому, що він буде скаржитися, якщо є циклічні посилання.
Таліс К.

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

3
Посилання застаріло: nodejs.org/api/http.html#http_class_http_incomingmessage
Wex,

10

Просто додавши, як відносного новачка в Node.js, мене бентежить те, що кожна структура має власну реалізацію об'єкта "запиту".

Наприклад,

Експрес: http://expressjs.com/api.html#req.param

і

Хапі: http://spumko.github.io/resource/api/#request-object (лише для того, щоб зауважити, що необроблений об'єкт запиту все ще доступний у request.raw.req)

Деякі бібліотеки припускають наявність експрес-методу "req.param" і зазнають невдачі при використанні в неекспрес-проектах.


Щиро дякую, що поділились опцією експрес-api.
Мухаммед Райхан Мухаймін

Посилання спумко порушено.
Чарльз Холброу

Документація синтаксичного аналізу є більш повною, ніж більшість: parse.com/docs/js/symbols/http.IncomingMessage.html
Чарльз Холброу

URL-адреса аналізу - 404, fwiw
Джон Біз,

Чому ви коли-небудь використовували http-фреймворк? Node.js робить http спочатку.
BT

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.