Node.js yêu cầu tài liệu đối tượng? [đóng cửa]


80

Đây là một câu hỏi khá đơn giản, nhưng tôi không tìm thấy gì trên Google. Tôi đang tìm tài liệu về tham số yêu cầu trong hàm tạo máy chủ của Node.js, nhưng tôi không thể tìm thấy bất kỳ thứ gì.

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

Gỡ lỗi bằng JSON.stringify () cho tôi một lỗi, đối tượng là hình tròn và chương trình dừng lại. Tôi đã thấy những thứ khác nhau như request.url, hoặc request.body, nhưng có trang nào ghi lại tất cả các hàm và tham số yêu cầu không? Có vẻ như nó phải dễ dàng tìm thấy, tôi chỉ dường như không thể tìm thấy nó.

Tôi đã thử lại, và hóa ra chỉ console.log(request)ghi tất cả dữ liệu từ yêu cầu. Đây chỉ là một tài liệu tham khảo:

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
Bạn có sự thông cảm của tôi. Hầu hết các ngôn ngữ, thư viện và khung công tác hiện đại đều có tài liệu tham khảo đáng sợ. Nếu bạn truy cập tài liệu về nút được đề cập bên dưới, bạn sẽ thấy rằng nó thực sự không phải là một tài liệu tham khảo; đó là một cuộc thảo luận nhiều hơn. Ví dụ: doc createServer () nói rằng nó nhận tham số là "một hàm được tự động thêm vào sự kiện 'request'" và trả về "một đối tượng máy chủ web". Không có gợi ý về 'loại' một trong hai thứ này là gì, và chắc chắn không có liên kết đến tài liệu tham khảo cho những thứ đó. Họ là ai? F trừ cho tài liệu.
jarmod

1
Tôi đã đọc qua câu hỏi, và nó có vẻ khá hợp lý với tôi. Vấn đề ở đây là chính các câu trả lời đã đưa điều này từ một câu hỏi thành một cuộc trò chuyện / bên thương hại trên tài liệu khủng khiếp. Nếu một câu trả lời / giải thích hợp lý có thể được đưa ra, tôi nghĩ câu hỏi này có thể cứu vãn được. Có lẽ tốt nhất là một câu hỏi mới, có liên quan.
demongolem

Tôi đã hỏi câu hỏi này cách đây 6 năm. Kể từ đó, tôi đã có thêm rất nhiều kinh nghiệm khi đọc qua tài liệu Nodejs, và những người từng làm việc trên tài liệu Nodejs đã thực hiện một công việc to lớn là giữ cho nó được cập nhật và chính xác. Tôi nghĩ rằng câu hỏi này đã thu hút được rất nhiều sự chú ý bởi vì nó là một câu hỏi đơn giản, nhưng nó cho thấy rằng có rất nhiều thông tin có sẵn qua console.log trong trường hợp bạn đang gặp khó khăn về điều gì đó.
Benjamin Collins

Câu trả lời:


26

Tôi không chắc đây có phải là câu trả lời chính xác hay không vì nó có vẻ đơn giản với tôi, nhưng bạn đã xem tại http://nodejs.org/api/http.html#http_http_incomingmessage chưa?

Yêu cầu là trường hợp của đối tượng trên. Nhân tiện, nếu bạn thực sự muốn xem những gì bên trong đối tượng đó với "brute force", bạn không nên phân tích cú pháp nó, vì nó sẽ không phải là một chuỗi JSON, mà thay vào đó hãy làm điều gì đó như:

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

Hy vọng nó giúp.


Rất tiếc, ý tôi là json.stringify, không phải json.parse. Đã quay lại để thử cách tiếp cận for (i in request) mà bạn đề cập và vì một số lý do, chỉ thực hiện console.log (request) đã kết thúc. Tôi mong đợi nó chỉ nói, [Đối tượng]. Có thể nó có một chức năng toString cụ thể cho bảng điều khiển? Cảm ơn vi đa trả lơi.
Benjamin Collins

5
Tốt hơn, để xem những gì bên trong bất kỳ đối tượng nào, hãy sử dụng use.inspect (). Util là một mô-đun cốt lõi; bạn có thể đơn giản var util=require('util');util.inspect(obj). Một vấn đề cơ bản JSON.stringify()là nó sẽ phàn nàn nếu có các tham chiếu theo chu kỳ.
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

Chỉ cần nói thêm, là một người mới tương đối trong Node.js, tôi thấy khó hiểu khi mỗi khung công tác có triển khai riêng của một đối tượng "yêu cầu".

Ví dụ,

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

Hapi: http://spumko.github.io/resource/api/#request-object (chỉ cần lưu ý rằng đối tượng yêu cầu thô vẫn có sẵn trong request.raw.req)

Một số thư viện giả định sự hiện diện của phương thức Express '"req.param" và không thành công khi được sử dụng trong các dự án không phải Express.


Cảm ơn bạn rất nhiều vì đã chia sẻ tùy chọn api nhanh.
Muhammad Raihan Muhaimin

Liên kết spumko bị hỏng.
Charles Holbrow,

Các tài liệu phân tích là hoàn chỉnh hơn so với hầu hết: parse.com/docs/js/symbols/http.IncomingMessage.html
Charles Holbrow

rằng phân tích cú pháp url là 404, fwiw
Jon Biz

Tại sao bạn lại sử dụng "khuôn khổ" http? Node.js thực hiện http nguyên bản.
BT

6

Tôi đồng ý với Delio, đối tượng Request thuộc loại đối tượng IncomingMessage, được tạo bởi http.ClientRequest.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.