从IncomingMessage读取数据,而不在Node.js(Hapi.js)中使用
在Node.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: '/
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数据回调范围之外的字符串。