Запросить внешнюю потоковую передачу JSON в Node - PullRequest
3 голосов
/ 21 июня 2019

В 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`));

Ответы [ 2 ]

3 голосов
/ 30 июня 2019

Вопрос сводится к тому, чтобы иметь доступный для чтения поток по сети и обрабатывать его во время выполнения.

Я не думаю, что это сработает, и, наконец, вам нужно только загрузить файл, иобрабатывать как локальный файл.

Есть способы получить файл из сети:

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'))

Но в конце нет читаемогопоток с обработкой во время выполнения.

1 голос
/ 01 июля 2019

Я думаю, вам нужно скачать файл и обработать вручную.Вы можете использовать функцию 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);
      } )

 })

теперь вы можете использовать объект для своих вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...