代码之家  ›  专栏  ›  技术社区  ›  rigon

从IncomingMessage读取数据,而不在节点中使用。js(Hapi.js)

  •  0
  • rigon  · 技术社区  · 7 年前

    在节点中。js服务器,请求是 IncomingMessage 反过来 IncomingMessage 实现 Readable Stream 界面

    如果我们想输出整个请求体,我们应该实现如下内容:

    req.on('data', chunk => {
       console.log(chunk.toString());
    });
    

    但是,这段代码会消耗流中的数据,我需要数据保留在流中以供以后使用。有没有办法从流中读取数据而不使用它?

    如果没有,是否可以将数据重新排入流队列?

    就我而言,我正在使用Hapi。js。请求流可通过访问 request.raw.req 。我的代码如下所示:

    const server = Hapi.server({ port: 3000, host: 'localhost' });
    
    server.route({
        method: 'POST',
        path: '/',
        handler: (request, h) => {
            var req = request.raw.req;    // Get the IncomingMessage
    
            req.on('data', chunk => {
               console.log(chunk.toString());
            });
            return 'Hello, world!';
        }
    });
    server.start();
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   rigon    6 年前

    添加以下管线选项可以实现此目的:

    options: {
        payload: {
            output: 'data',
            parse: false
        }
    }
    

    这迫使Hapijs读取有效载荷并将其作为数据输出,即。, request.payload 将是 Buffer 而不是流。

    parse选项是可选的。当设置为false时,Hapijs将忽略请求的内容类型,并且不会尝试对其进行解析。