Запись нескольких файлов из потока Node.js - PullRequest
0 голосов
/ 08 сентября 2018

Я пишу короткий фрагмент Node.js, который анализирует RSS-канал, извлекает ссылки, перенастраивает их в нужные мне PDF-ссылки и затем записывает эти файлы. Код выглядит так:

var https = require('https');
var fs = require('fs');
const Parser = require("rss-parser");
let parser = new Parser();

parser.parseURL("https://regulations.justia.com/regulations/fedreg?limit=20&mode=atom")
  .then((feed) => {
    const base = "https://docs.regulations.justia.com/entries"
    feed.items.forEach((item, i) => {

      // Parsing to create PDF link...
      const str = item.link;
      let dates = str.substring(50, 60);
      let newDates = dates.replace(/\//, "-").replace(/\//, "-");
      let ending = str.substring(61).replace(".html",".pdf");
      let fullString = `${base}/${newDates}/${ending}`;

      // Fetching and saving the PDF file....
      const file = fs.createWriteStream(`${item.title}.pdf`);
      const request = https.get(fullString, (res) => {
        res.pipe(file);
      });
    });
  })
  .catch((err) => console.log(err));

У меня сейчас две ошибки.

1) Как-то связано с моим записываемым потоком. Когда я пытаюсь создать файл на основе item.title из RSS-канала, я каждый раз получаю эту ошибку:

Error: ENOENT: no such file or directory, open 'Notice - Solicitation of Nominations for Appointment to the World Trade Center Health Program Scientific/Technical Advisory Committee (STAC).pdf'

Это как-то связано с круглыми скобками или с тире в заголовке элемента? Если нет, то что еще может быть причиной этой проблемы?

2) Когда я изменю код (чтобы назвать записываемый поток на что-то более простое), мой код выдаст следующую ошибку:

Error: socket hang up
    at TLSSocket.onHangUp (_tls_wrap.js:1135:19)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at TLSSocket.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1056:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Эта ошибка выдается обычно после того, как я скачал несколько PDF-файлов, но не все. Что я могу изменить в этом примере, чтобы обойти эти ошибки? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 08 сентября 2018

Проблема в том, что некоторые из item.title содержат символ /, который указывает на папку, которая не существует в этом случае.

Это работает, когда вы избавляетесь от этих / из заголовка. Э.Г.

const file = fs.createWriteStream(`${item.title.replace('/', '-')}.pdf`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...