读取http / 2推送流失败,错误-505

问题描述 投票:0回答:1

我正在尝试读取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推送流对我来说也是一个新话题,所以请考虑我是初学者,为此苦苦挣扎。

node.js stream push http2
1个回答
0
投票

解决了一些帮助,使用'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();

附注:此脚本的问题是如果连接断开,则流不会恢复。

© www.soinside.com 2019 - 2024. All rights reserved.