ofetch؛ fetch هوشمندتر برای Node، مرورگر و worker
خلاصهٔ کاملتر
ofetch یه wrapper دور fetch هست که تیم unjs ساخته و هدفش اینه که چیزای تکراری fetch رو دیگه دستی ننویسی. روی Node، مرورگر و worker کار میکنه. README میگه شاخهٔ اصلی الان روی نسخهٔ ۲ (alpha) هست و مستندات نسخهٔ ۱ جداست.
اولین فرقش با fetch معمولی اینه که جواب رو خودش parse میکنه. اگه JSON باشه مستقیم آبجکت میگیری و اگه محتوای باینری باشه یه Blob بهت میده. با responseType هم میتونی بگی جواب رو به شکل text، blob، arrayBuffer یا stream بخواد. وقتی هم یه آبجکت به body بدی، خودش JSON.stringify میکنه و برای POST، PUT و PATCH هدرهای content-type و accept رو روی application/json میذاره.
const { users } = await ofetch("/api/users", {
method: "POST",
body: { some: "json" },
});دومین فرق مدیریت خطاست. fetch معمولی روی 404 یا 500 خطا نمیده، ولی ofetch وقتی response.ok برابر false باشه یه FetchError با پیام خوانا پرتاب میکنه و body خطا رو تو error.data میذاره. اگه این رفتار رو نخوای، ignoreResponseError: true میذاری.
retry هم خودکاره. برای کدهایی مثل 408، 409، 425، 429، 500، 502، 503 و 504 بهطور پیشفرض یه بار دوباره تلاش میکنه. نکتهٔ مهمش اینه که برای POST، PUT، PATCH و DELETE پیشفرض retry نمیکنه تا یه عملیات دو بار انجام نشه؛ ولی اگه خودت retry رو ست کنی، برای همهٔ متدها تلاش دوباره میکنه. retryDelay پیشفرض صفره و timeout پیشفرض خاموشه.
برای کارهای مشترک interceptor داره، یعنی تابعهایی که قبل و بعد از درخواست اجرا میشن: onRequest، onRequestError، onResponse و onResponseError. با ofetch.create هم یه نمونه با تنظیمات ثابت مثل baseURL میسازی. فقط حواست باشه تنظیمات پیشفرض فقط یه لایه کپی میشن و گزینههای تودرتو مثل headers ممکنه دردسر بسازن. اگه هدرهای جواب رو لازم داری ofetch.raw هست و برای fetch خام ofetch.native.
برای proxy هم توضیح داده: Bun و Deno متغیرهای HTTP_PROXY و HTTPS_PROXY رو میخونن، ولی Node.js باید NODE_USE_ENV_PROXY=1 داشته باشه یا با گزینهٔ dispatcher و ProxyAgent از undici تنظیم بشه. Bun هم یه گزینهٔ proxy مستقیم داره.
نکات کلیدی:
- نسخهٔ ۲ الان alpha هست و مستندات v1 جداست
- روی خطای HTTP یه FetchError میده و body خطا تو error.data هست
- retry پیشفرض یه باره و برای POST، PUT، PATCH و DELETE خاموشه
- timeout پیشفرض خاموشه و retryDelay پیشفرض صفر میلیثانیهست
- تو ofetch.create گزینههای تودرتو مثل headers فقط یه لایه کپی میشن




