簡體   English   中英

從Node.js流寫入多個文件

[英]Writing Multiple Files From Node.js Stream

我正在編寫一個簡短的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)與我的可寫流有關。 當我嘗試基於RSS feed中的item.title創建文件時,每次都會出現此錯誤:

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(但不是全部)后,通常會引發此錯誤。 為了克服這些錯誤,在此示例中我可以做些什么更改? 謝謝您幫忙!

問題是item.title的某些包含/字符,表示在這種情況下不存在的文件夾。

當您從標題中刪除那些/時,它將起作用。 例如

const file = fs.createWriteStream(`${item.title.replace('/', '-')}.pdf`);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM