خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه دانلود فایل ها با Node.js

این پروژه یک ابزار مستقل عالی یا بخش مهمی از یک برنامه وب بزرگتر است.

دانلود فایل‌ها در فضای ذخیره‌سازی محلی به جای نگهداری آن‌ها در فضای ذخیره‌سازی ابری چندین مزیت دارد. اینها شامل دسترسی آسان تر، دسترسی بدون اتصال به اینترنت و مالکیت کامل داده های شما است.

می‌توانید با استفاده از ماژول‌های داخلی Node.js فایل‌های تک یا چندگانه را دانلود کنید. همچنین می توانید به جای آن از یک کتابخانه شخص ثالث برای دستیابی به نتایج مشابه استفاده کنید.

دانلود فایل ها بدون کتابخانه شخص ثالث

برای دانلود یک فایل با استفاده از Node.js، بدون کمک بسته های شخص ثالث، به سه ماژول اصلی Node.js نیاز دارید: fs، https، و مسیر.

ماژول fs از بسیاری از وظایف فایل از جمله خواندن، ایجاد، به روز رسانی، حذف و تغییر نام پشتیبانی می کند. ماژول https یک وب سرور برای رسیدگی به درخواست ها و ارائه پاسخ ها ایجاد می کند. ماژول path راهی برای تعامل با مسیرهای فهرست و فایل ارائه می دهد.

با استفاده از این ماژول ها، می توانید یک درخواست HTTP GET برای دسترسی به یک منبع فایل از سرور وب ارسال کنید و سپس یک کپی از منبع را در سیستم محلی خود تهیه کنید.

برای شروع، ماژول های مورد نیاز را وارد کنید:

const https = require('https');
const fs = require('fs');
const path = require('path');

شما باید از نام فایل از URL به عنوان یک نام پیش فرض خوب برای ذخیره آن استفاده کنید. شما می توانید از متد .basename ماژول path برای به دست آوردن نام فایل از URL آن استفاده کنید. این متد یک آرگومان مسیر را می گیرد و آخرین قسمت یک مسیر را برمی گرداند.

مثلا:

const filename = path.basename(url);

سپس با فراخوانی متد https.get() فایل را از سرور درخواست کنید. این روش URL را به عنوان آرگومان اول و یک تابع فراخوانی برای پاسخ به عنوان آرگومان دوم می گیرد

متغیر url را به عنوان اولین آرگومان و سپس یک تابع callback برای پردازش زمانی که این روش یک جریان پاسخ دریافت می کند، ارسال کنید:

https.get(url, (res) => {
})

در تابع callback، می توانید از متد fs.createWriteStream() برای ایجاد یک جریان قابل نوشتن جدید استفاده کنید و متغیر نام فایل را به عنوان آرگومان ارسال کنید.

مطلب مرتبط:   مقدمه ای بر React Context API

مثلا:

const fileStream = fs.createWriteStream(filename);
res.pipe(fileStream);

متد ()createWriteStream فرآیند نوشتن داده‌ها در فایل را آسان‌تر می‌کند، مخصوصاً زمانی که تکه‌های بزرگی از داده را مدیریت می‌کنید.

متد pipe() سپس جریان داده پاسخ GET را به شی fileStream می فرستد.

برای ثبت یک پیام به کنسول پس از پایان دانلود فایل اسکریپت، یک فرستنده رویداد .on() را به متغیر fileStream پیوست کنید:

fileStream.on('finish', () => {
  fileStream.close();
  console.log('Download finished');
});

شی fileStream زمانی که تمام داده ها را در فایل نوشته است، یک رویداد پایانی را منتشر می کند. این مورد را از طریق متد .on() بگیرید و یک تابع callback برای بستن fileStream و ثبت پیام به کنسول ارائه دهید.

برای اجرای بهتر و قابلیت استفاده مجدد کارآمد اسکریپت، این کد را در تابعی بپیچید که URL را به عنوان آرگومان خود در نظر بگیرد:

function downloadFile(url) {
    const filename = path.basename(url);

    https.get(url, (res) => {
        const fileStream = fs.createWriteStream(filename);
        res.pipe(fileStream);

        fileStream.on('finish', () => {
            fileStream.close();
            console.log('Download finished')
        });
    })
}

برای اجرای تابع، آن را فراخوانی کنید و URL فایلی را که می خواهید دانلود کنید ارسال کنید:

downloadFile([file url]);

برای اجرای اسکریپت، ترمینال خود را باز کرده و نود و سپس نام فایل جاوا اسکریپت را وارد کنید:

node [script name]

این اسکریپت URL فایلی را که به تابع downloadFile() ارسال کرده اید دانلود کرده و در دایرکتوری کاری شما ذخیره می کند.

رسیدگی به خطاها هنگام دانلود فایل ها

در Node.js، خطاهای خاصی مانند نوشتن در جریان، اتصال ضعیف سرویس، یا مشکلات مربوط به خود فایل ممکن است هنگام دانلود فایل‌ها رخ دهد. بسیار مهم است که پیام‌های خطا را زمانی که این خطاها رخ می‌دهند ثبت کنید تا بتوانید مشکل را حل کنید.

Block را امتحان کنید/Catch

بلوک try-catch یک ساختار برنامه‌نویسی است که به شما امکان می‌دهد خطاها و استثنائات احتمالی در کد خود را مدیریت کنید.

مطلب مرتبط:   CSS مدرن که می توانید برای استایل دادن به جدول HTML خود استفاده کنید

بلوک‌های تلاش و گرفتن بلوک تلاش… گرفتن را تشکیل می‌دهند. ابتدا کد بلوک try اجرا می شود و اگر بلوک try یک استثنا ایجاد کند، کد بلوک catch اجرا می شود.

try {
    downloadFile([file url]);
} catch (error) {
    console.log(error);
}

از یک بلوک try/catch استفاده کنید تا اطمینان حاصل کنید که می توانید خطاهای مربوط به دانلود را پیدا کنید. سپس می‌توانید هر گونه خطا را در صورت لزوم مدیریت کنید، مانند ورود آن به کنسول یا تلاش مجدد برای دانلود.

کد وضعیت پاسخ HTTP

کدهای وضعیت برای پاسخ های HTTP نشان می دهد که آیا یک درخواست HTTP خاص با موفقیت انجام شده است یا خیر.

مثلا:

https.get(url, (res) => {
    const code = res.statusCode();
    console.log(code)
    const fileStream = fs.createWriteStream(filename);
});

اگر درخواست یک کد وضعیت خارج از محدوده موفقیت، 200-299 را برمی گرداند، در درخواست مشکلی وجود داشته است. کد وضعیت HTTP را بررسی کنید، سپس معنای کد وضعیت را جستجو کنید تا در صورت لزوم با خطا مقابله کنید.

دانلود چندین فایل

هنگام اجرای گره [نام اسکریپت]، می توانید چندین فایل را به طور همزمان با ارسال URL فایل به عنوان آرگومان دانلود کنید. برای انجام این کار، باید قسمت های خاصی از اسکریپت خود را تغییر دهید.

در جاوا اسکریپت، آرگومان هایی که در کنار دستور node ارسال می شوند، در process.argv، یک ویژگی شی جهانی Node.js، در دسترس هستند. این ویژگی آرایه ای از آرگومان های خط فرمان را برمی گرداند. اولین عنصر در این آرایه باید node باشد، فرمان واقعی که اجرا می کنید. دومی نام فایل اسکریپت خواهد بود، سپس هر آرگومان زیر باید یک URL باشد.

برای دانلود همزمان چندین فایل، آرایه را از process.argv در یک متغیر ذخیره کنید. سپس متد slice() را اجرا کنید تا دو عنصر اول را که URL نیستند حذف کنید:

const args = process.argv;
const urls = args.slice(2);

متد slice یک آرایه جدید از عناصر انتخاب شده در یک آرایه ایجاد می کند. این روش از یک شروع مشخص تا یک پایان مشخص (غیر فراگیر) را انتخاب می کند.

مطلب مرتبط:   نحوه نصب شبیه ساز برای آیفون با استفاده از 4 روش آسان

در این حالت، ارسال مقدار 2، نام فرمان گره و نام فایل اسکریپت شما را حذف می کند.

در نهایت، با استفاده از روش نقشه جاوا اسکریپت، هر عنصر در آرایه urls را به downloadFile():

urls.map(url =>{
    downloadFile(url)
});

برای اجرای کد، دستور node را به همراه نام فایل جاوا اسکریپت خود و آدرس هایی که می خواهید دانلود کنید وارد کنید:

node [script name] url1 url2 url3

استفاده از کتابخانه شخص ثالث

همچنین می توانید فایل ها را با استفاده از یک کتابخانه شخص ثالث مانند بسته دانلود npm دانلود کنید.

در داخل فهرست اسکریپت خود، دستور npm زیر را برای نصب بسته دانلود اجرا کنید:

npm install download

بسته دانلود شده را در اسکریپت خود بخواهید، سپس آرگومان های خط فرمان را در یک آرایه ذخیره کنید:

const download = require('download');
const args = process.argv;
const urls = args.slice(2);

اکنون می توانید از کتابخانه دانلود برای دانلود فایل ها استفاده کنید. بسته به هدف خاص خود می توانید این کار را به روش های مختلفی انجام دهید.

مثلا:

async function downloadFile(urls){
await Promise.all(urls.map((url) => download(url, "files")))
};

downloadFile(urls);

تابع downloadFile را غیر همگام اعلام کنید و یک Promise ایجاد کنید تا منتظر بمانید تا کار خاص با کلمه کلیدی await کامل شود. آرایه url ها را به تابع دانلود نگاشت کنید و نام یک پوشه محلی (در این مورد “فایل ها” را برای ذخیره فایل ها ارسال کنید.

دانلود فایل ها در سیستم فایل محلی

توابع داخلی Node، مانند fs و https، نوشتن یک دانلود کننده فایل را آسان می کند. برای آسان‌تر کردن آن، می‌توانید از یک ماژول شخص ثالث مانند دانلود استفاده کنید.

هر دو روش به شما امکان می دهند فایل ها را از یک سرور راه دور دانلود کنید و آنها را در سیستم فایل محلی ذخیره کنید. شما باید بهترین روش را برای نیازهای خود انتخاب کنید و از آن در برنامه بعدی Node.js خود استفاده کنید.