我正在尝试读取http / 2推送流,但下面的代码失败并显示错误。当我在Chrome浏览器中使用相同的网址时,我会收到流服务器生成的“心跳”,并且可以看到正在进入的数据。有什么指针吗?我的目标只是阅读服务器生成的所有JSON推送响应。
Error:
{ Error [ERR_HTTP2_ERROR]: Protocol error
at Http2Session.onSessionInternalError [as error] (internal/http2/core.js:637:26)
code: 'ERR_HTTP2_ERROR',
name: 'Error [ERR_HTTP2_ERROR]',
errno: -505 }
Node.JS代码:
const http2 = require('http2');
const client = http2.connect('http://api.service.com/absolute/path/subscribe?api_key={key}');
const req = client.request();
req.setEncoding('utf8');
req.on('response', (headers, flags) => {
console.log(headers);
});
let data = '';
req.on('data', (d) => data += d);
req.on('end', () => {
console.log('end');
console.log(data);
client.destroy()
});
req.end();
旁注:我是Node.js的新手,http / 2推送流对我来说也是一个新话题,所以请考虑我是初学者,为此苦苦挣扎。
解决了一些帮助,使用'request'库:https://www.npmjs.com/package/request
const request = require("request");
const getPushData = () => {
let completeResponse = "";
request
.get('http://api.service.com/absolute/path/subscribe?api_key={key}')
.on('response', (response)=>{
console.log("Response received successfully");
})
.on('data', (chunk)=>{
console.log("Receiving the chunk...");
console.log(chunk);
let dataReceived = new Buffer(chunk).toString("utf8");
console.log(dataReceived);
completeResponse += chunk;
})
.on('error', (err)=>{
console.log("Something went wrong:");
console.log(err.message);
})
.on("end", ()=>{
console.log("The complete data received is:");
console.log(completeResponse);
let jsonObj = JSON.parse(completeResponse);
console.log(jsonObj);
});
}
getPushData();
附注:此脚本的问题是如果连接断开,则流不会恢复。