在不使用第三方庫的情況下在 Node JS 中下載檔案
Node js 在其大部分操作中大量使用第三方庫。
但是,在執行下載檔案等操作時,我們也可以通過在程式中要求它們來使用作為 Node js 核心一部分的內建包或模組。
在 NodeJS 中下載檔案
我們可以使用 fs
和 HTTP
模組下載 Node js 中的任何檔案。
fs
模組為我們提供了處理系統上檔案的功能,此外還可以訪問一系列非同步方法來對檔案執行其他基本操作,例如重新命名和刪除。
另一方面,Nodejs 在其標準庫中提供了標準的 HTTP
和 HTTPS
模組。使用這種方法,我們可以請求使用相同模組的伺服器。
我們還可以建立一個監聽埠並做出響應的伺服器。首先,我們需要使用主檔案 index.js
建立一個簡單的 Node js 應用程式才能開始。
現在在這個檔案下,使用 require()
函式,我們將需要 fs
模組和 HTTP
模組,而無需任何事先安裝,如下所示。
const http = require('https');
const fs = require('fs');
使用 http.get()
方法,我們會將端點作為第一個引數傳遞給我們要下載的資源,然後是一個 callback
函式,該函式的工作是在收到檔案流後執行並使用函式中指定的名稱在我們的本地系統中建立檔案。
使用 streams
可以讓我們更快地下載此檔案,因為我們不必等到整個資料負載載入完畢。一旦資料可用於響應 HTTP
客戶端,流處理過程就開始了。
使用 streams
支援的 Node js API fs.createWriteStream()
,我們將為我們想要建立的檔案建立一個可寫流。此方法只接受一個引數:我們希望儲存檔案的位置。
使用 fs
模組在指定位置建立檔案
const https = require('https');
const fs = require('fs');
const endpoint = 'https://query.data.world/s/5r2olboe2fb24vewtt2yr3ktp4kwoi';
https.get(endpoint, (res) => {
const file_name = 'electricvehicles.csv';
const writeStream = fs.createWriteStream(file_name);
});
請注意,由於 fs
模組會自動儲存當前資料夾,我們已經指定了我們想要下載的檔案的名稱。
最後,使用通常在檔案流上呼叫的 pipe()
方法,我們將通過管道將檔案流傳輸到 HTTP
響應並使用 writeStream.close()
方法關閉寫入流。
const https = require('https');
const fs = require('fs');
const endpoint = 'https://query.data.world/s/5r2olboe2fb24vewtt2yr3ktp4kwoi';
https.get(endpoint, (res) => {
const file_name = 'electricvehicles.csv';
const writeStream = fs.createWriteStream(file_name);
res.pipe(writeStream);
writeStream.on('end', function() {
writeStream.close();
console.log('Thed download is Completed');
});
});
執行上面的程式碼會下載當前資料夾中的 CSV
檔案,該檔案以程式碼中指定的名稱命名,如下所示。
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn