如何在 Node.js HTTP2 中获取请求正文?

Posted

技术标签:

【中文标题】如何在 Node.js HTTP2 中获取请求正文?【英文标题】:How to get request body in Node.js HTTP2? 【发布时间】:2019-08-10 02:53:20 【问题描述】:

我有以下代码,但不知道如何从请求中获取正文:

var http2 = require('http2');
var fs = require('fs');

var server = http2.createSecureServer(
  key: fs.readFileSync('localhost-privkey.pem'),
  cert: fs.readFileSync('localhost-cert.pem')
)

server.on('error', function (error)  console.error(error) )

server.on('stream', function (stream, headers, body) 

  var method = headers[':method']
  var path = headers[':path']
  var body = body || ''

  console.log(method, path, body)

  stream.respond(
    'content-type': `text/$type`,
    ':status': 200
  )

  fs.readFile(file, function (error, file) 
    if (error) file = fs.readFileSync('error.html')
    return stream.end(file)
  )
)

server.listen(3443)

【问题讨论】:

【参考方案1】:

我认为您应该将stream 视为readable stream

server.on('stream', (stream, headers) => 
    var chunks = [];

    stream.on('data', function (chunk) 
        chunks.push(chunk);
    );

    stream.on('end', function () 
        // Here is your body
        var body = Buffer.concat(chunks);

        // Not sure if useful
        chunks = [];    
    );

);

另外,根据documentation,server.on('stream' 回调的第三个参数是flags,而不是body

【讨论】:

以上是关于如何在 Node.js HTTP2 中获取请求正文?的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 Node.js 中获取正文格式的请求

如何使用 node.js 发送 HTTP/2.0 请求

如何提取正文请求 node.js

使用 Node.js 和 Express 发布时如何访问请求正文?

如何从 Node.js IMAP 模块中的正文获取纯文本

node.js 路由验证 json 正文