Javascript 如何将HTTPS get响应通过管道传输到对象中
我转换了我的代码,这样就不需要额外的节点模块,我可以只使用一些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
/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个版本,所以要短得多。