Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript 如何将HTTPS get响应通过管道传输到对象中_Javascript_Node.js_Json_Https_Get - Fatal编程技术网

Javascript 如何将HTTPS get响应通过管道传输到对象中

Javascript 如何将HTTPS get响应通过管道传输到对象中,javascript,node.js,json,https,get,Javascript,Node.js,Json,Https,Get,我转换了我的代码,这样就不需要额外的节点模块,我可以只使用一些HTTPS GET请求,问题是当我尝试管道/releases/这基本上是一个原始JSON文件时,我的代码需要它返回,出现了类似SyntaxError:JSON输入意外结束的问题,因为出于某种原因,当我使用console.log()调用所谓的JSON数组时,结尾不是用]或}完成的。因此,我尝试将响应通过管道传输到数组中,但现在出现了一个错误:dest.on不是函数 代码: https.get({hostname: `api.gi

我转换了我的代码,这样就不需要额外的节点模块,我可以只使用一些HTTPS GET请求,问题是当我尝试管道
/releases/
这基本上是一个原始JSON文件时,我的代码需要它返回,出现了类似
SyntaxError:JSON输入意外结束
的问题,因为出于某种原因,当我使用console.log()调用所谓的JSON数组时,结尾不是用]或}完成的。因此,我尝试将响应通过管道传输到数组中,但现在出现了一个错误:
dest.on不是函数

代码:

    https.get({hostname: `api.github.com`, path: `/repos/${username}/${reponame}/releases`, headers: {'User-Agent': 'a user agent'}}, async (response) => {
        var file = new Array()
        response.pipe(file)
        response.on('end', async function() { //issue occurs at response.pipe ???
        var releases = JSON.parse(fs.readFileSync('./releases.json', 'utf8'))
        console.log(releases)
我从Github访问的JSON文件如下:(随机存储库)

但是,我的文件(releases.json)看起来像


编辑:我做了大量的测试。我使用了我的pkg输出的同一个JSON文件,用fs读取它,诸如此类,一切看起来都很好。因此,https/response最有可能出现问题,您可以
要求
JSON文件。因此,如果需要此文件,可以执行以下操作:

const releases = require('./releases.json');

除非你真的想读,否则你不需要用fs来读。

你可以
要求
JSON文件。因此,如果需要此文件,可以执行以下操作:

const releases = require('./releases.json');
除非您真的想阅读,否则您不需要使用fs阅读它

TypeError:dest.on不是函数

如果尝试通过管道传输到不可写流对象,将引发此错误

在本例中,数组不是可写流。您可以使用
fs.createWriteStream()
创建一个可写流,并通过管道将响应传递给它

https.get(
{hostname:`api.github.com`,路径:`/repos/${username}/${reponame}/releases`,标题:{“用户代理”:“用户代理”},
异步响应=>{
const writeablestreamfile=fs.createWriteStream(“./releases.json”);
响应.pipe(writableStreamFile);
on(“end”,异步函数(){
var releases=JSON.parse(fs.readFileSync(“./releases.JSON”,“utf8”);
控制台日志(发布);
});
}
);
TypeError:dest.on不是函数

如果尝试通过管道传输到不可写流对象,将引发此错误

在本例中,数组不是可写流。您可以使用
fs.createWriteStream()
创建一个可写流,并通过管道将响应传递给它

https.get(
{hostname:`api.github.com`,路径:`/repos/${username}/${reponame}/releases`,标题:{“用户代理”:“用户代理”},
异步响应=>{
const writeablestreamfile=fs.createWriteStream(“./releases.json”);
响应.pipe(writableStreamFile);
on(“end”,异步函数(){
var releases=JSON.parse(fs.readFileSync(“./releases.JSON”,“utf8”);
控制台日志(发布);
});
}
);

我发现了如何将HTTP请求通过管道传输到对象中,而不是通过管道传输到文件中。多亏了这个。我这样做了,并将字符串转换为JSON数组

https.get({hostname:`api.github.com`,路径:`/repos/${username}/${reponame}/releases`,标题:{'User-Agent':'Agent'}}}),异步响应=>{
var str=''
响应.on('数据',(数据)=>{
str+=数据
})
on('end',异步函数(){
var releases=JSON.parse(str)
//等等。。。

我发现了如何将HTTP请求通过管道传输到对象中,而不是通过管道传输到文件中。多亏了这一点,我做到了这一点,并将字符串转换为JSON数组

https.get({hostname:`api.github.com`,路径:`/repos/${username}/${reponame}/releases`,标题:{'User-Agent':'Agent'}}}),异步响应=>{
var str=''
响应.on('数据',(数据)=>{
str+=数据
})
on('end',异步函数(){
var releases=JSON.parse(str)
//等等。。。

导致
未处理PromisejectionWarning:SyntaxError:JSON输入意外结束
,这发生在
JSON上。解析
code不太确定,但可能是javascript异步执行的问题,请尝试在
关闭
而不是
结束时读取文件。IO操作往往需要时间。结果
unhandledPromisejectionWarning:SyntaxError:JSON输入意外结束
,发生在
JSON.parse
code不太确定,但可能是javascript异步执行的问题,请尝试在
close
而不是
end
上读取文件。IO操作往往需要时间。当我通过doi调用文件时ng,它说该文件有一个语法错误,即使当我打开该文件时,它是完全正确的。这可能与https将其管道传输到JSON文件有关,因为完整的JSONY行您将不得不向我们显示JSON以帮助我们实现这一点。听起来它是一个格式错误的JSON字符串。这是一个pastebin链接:,我编辑了在我的帖子中,这是一行很长的JSON。我的另一个存储库只有4个版本,所以它要短得多。当我这样调用文件时,它会说文件有语法错误,即使当我打开文件时,它是完全正确的。这可能与https将它传输到JSON文件有关,因为你将要使用一行JSONY我们必须向我们展示JSON来帮助我们。这听起来像是一个格式错误的JSON字符串。这是一个pastebin链接:,我用它编辑了我的文章,这是一行很长的JSON。我的另一个存储库只有4个版本,所以要短得多。