从 IncomingMessage 中读取数据而不消耗 Node.js (Hapi.js)
Read data from IncomingMessage without consuming in Node.js (Hapi.js)
在 Node.js 服务器中,请求是 IncomingMessage. In turn, IncomingMessage
implements the 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();
添加以下路由选项就可以了:
options: {
payload: {
output: 'data',
parse: false
}
}
这会强制 Hapijs 读取有效负载并将其输出为数据,i。即,request.payload
将是 Buffer
而不是流。
解析选项是可选的。当设置为 false 时,Hapijs 将忽略请求的内容类型并且不会尝试解析它。
在 Node.js 服务器中,请求是 IncomingMessage. In turn, IncomingMessage
implements the 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();
添加以下路由选项就可以了:
options: {
payload: {
output: 'data',
parse: false
}
}
这会强制 Hapijs 读取有效负载并将其输出为数据,i。即,request.payload
将是 Buffer
而不是流。
解析选项是可选的。当设置为 false 时,Hapijs 将忽略请求的内容类型并且不会尝试解析它。