Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从IncomingMessage读取数据,而不在Node.js(Hapi.js)中使用_Node.js_Stream_Request_Hapijs - Fatal编程技术网

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

从IncomingMessage读取数据,而不在Node.js(Hapi.js)中使用,node.js,stream,request,hapijs,Node.js,Stream,Request,Hapijs,在Node.js服务器中,请求是的实例。反过来,IncomingMessage实现该接口 如果我们想要输出整个请求体,我们应该实现如下内容: req.on('data', chunk => { console.log(chunk.toString()); }); const server = Hapi.server({ port: 3000, host: 'localhost' }); server.route({ method: 'POST', path: '/

在Node.js服务器中,请求是的实例。反过来,
IncomingMessage
实现该接口

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

req.on('data', chunk => {
   console.log(chunk.toString());
});
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();
但是,这段代码会消耗流中的数据,我需要数据保留在流中以供以后使用。有没有办法从流中读取数据而不使用它

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

在我的例子中,我使用的是Hapi.js。可以通过
request.raw.req
访问请求流。我的代码如下所示:

req.on('data', chunk => {
   console.log(chunk.toString());
});
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();

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

options: {
    payload: {
        output: 'data',
        parse: false
    }
}
这迫使Hapijs读取有效负载并将其作为数据i输出。e、 ,
请求。有效负载将是
缓冲区,而不是流

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

将chunk.toString()转换为.on数据回调范围之外的字符串。