在 Node 中请求外部流 JSON 提要
Request an external streaming JSON feed in Node
在 Node.js
中,我使用 stream-chain
和 stream-json
从本地和远程资源请求流式传输。下面适用于本地资源,但如何修改它以允许外部资源?我需要先下载文件还是?
const fs = require('fs');
const { chain } = require('stream-chain');
const Pick = require('stream-json/filters/Pick');
const { streamArray } = require('stream-json/streamers/StreamArray');
const path = './feed.json'; // External URL or local file
const pipeline = chain([
fs.createReadStream(path),
Pick.withParser({ filter: 'products', once: true }), // Custom: modify feed
streamArray(),
data => data
]);
pipeline.on('data', () => {
counter++;
console.log(data);
});
pipeline.on('error', error => console.log(error));
pipeline.on('end', () => console.log(`Found ${counter} entries`));
问题归结为通过网络获得可读流并在 运行 时间处理它。
我认为这行不通,最后你必须只下载文件,并作为本地文件处理。
从网络获取文件的方式有:
var remotePath = "https://....."
https.get(remotePath, response => {
var stream = response.pipe(file);
stream.on("finish", function() {
console.log("done");
});
});
或使用请求
request(remotePath).pipe(fs.createWriteStream('./remoteFeed.json'))
但最后没有经过 运行 时间处理的可读流。
我认为您需要下载文件并手动处理。您可以使用 request()
函数来获取在线文件。但我同意 Suryapratap
。但您也可以写入文件并从同一文件读取并继续您的程序。示例
request("https://reqres.in/api/users",(err, res, body)=>{
if(err) console.log(err);
const objectBody = JSON.parse(body)
fs.writeFile('justtest.json',JSON.stringify(objectBody),err=>{
if(err) throw err;
})
const readable = fs.createReadStream('./justtest.json', "UTF-8");
readable.on("data", data =>{
payload = JSON.parse(data);
console.log(payload);
} )
})
您现在可以对您的东西使用对象。
在 Node.js
中,我使用 stream-chain
和 stream-json
从本地和远程资源请求流式传输。下面适用于本地资源,但如何修改它以允许外部资源?我需要先下载文件还是?
const fs = require('fs');
const { chain } = require('stream-chain');
const Pick = require('stream-json/filters/Pick');
const { streamArray } = require('stream-json/streamers/StreamArray');
const path = './feed.json'; // External URL or local file
const pipeline = chain([
fs.createReadStream(path),
Pick.withParser({ filter: 'products', once: true }), // Custom: modify feed
streamArray(),
data => data
]);
pipeline.on('data', () => {
counter++;
console.log(data);
});
pipeline.on('error', error => console.log(error));
pipeline.on('end', () => console.log(`Found ${counter} entries`));
问题归结为通过网络获得可读流并在 运行 时间处理它。
我认为这行不通,最后你必须只下载文件,并作为本地文件处理。
从网络获取文件的方式有:
var remotePath = "https://....."
https.get(remotePath, response => {
var stream = response.pipe(file);
stream.on("finish", function() {
console.log("done");
});
});
或使用请求
request(remotePath).pipe(fs.createWriteStream('./remoteFeed.json'))
但最后没有经过 运行 时间处理的可读流。
我认为您需要下载文件并手动处理。您可以使用 request()
函数来获取在线文件。但我同意 Suryapratap
。但您也可以写入文件并从同一文件读取并继续您的程序。示例
request("https://reqres.in/api/users",(err, res, body)=>{
if(err) console.log(err);
const objectBody = JSON.parse(body)
fs.writeFile('justtest.json',JSON.stringify(objectBody),err=>{
if(err) throw err;
})
const readable = fs.createReadStream('./justtest.json', "UTF-8");
readable.on("data", data =>{
payload = JSON.parse(data);
console.log(payload);
} )
})
您现在可以对您的东西使用对象。