fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

| کانال توسعه‌دهندگان جاوااسکریپت |

| کانال توسعه‌دهندگان جاوااسکریپت |

رفتن به کانال در Telegram

⭕️ کانال توسعه‌دهندگان جاوااسکریپت دولوپیکس 💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport

نمایش بیشتر
3 838
مشترکین
-324 ساعت
-187 روز
-3130 روز

در حال بارگذاری داده‌ها

ابر برچسب‌ها
هیچ داده‌ای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
اکتبر '26
اکتبر '26
+126
در 0 کانال‌ها
سپتامبر '260
در 0 کانال‌ها
Get PRO
اوت '260
در 0 کانال‌ها
Get PRO
ژوئیه '260
در 0 کانال‌ها
Get PRO
ژوئن '260
در 0 کانال‌ها
Get PRO
مه '260
در 0 کانال‌ها
Get PRO
آوریل '260
در 0 کانال‌ها
Get PRO
مارس '260
در 0 کانال‌ها
Get PRO
فوریه '260
در 0 کانال‌ها
Get PRO
ژانویه '260
در 0 کانال‌ها
Get PRO
دسامبر '250
در 0 کانال‌ها
Get PRO
نوامبر '250
در 0 کانال‌ها
Get PRO
اکتبر '25
+38
در 0 کانال‌ها
Get PRO
سپتامبر '25
+90
در 0 کانال‌ها
Get PRO
اوت '25
+138
در 0 کانال‌ها
Get PRO
ژوئیه '25
+167
در 0 کانال‌ها
Get PRO
ژوئن '25
+167
در 0 کانال‌ها
Get PRO
مه '25
+174
در 0 کانال‌ها
Get PRO
آوریل '25
+167
در 0 کانال‌ها
Get PRO
مارس '25
+167
در 0 کانال‌ها
Get PRO
فوریه '25
+203
در 0 کانال‌ها
Get PRO
ژانویه '25
+234
در 0 کانال‌ها
Get PRO
دسامبر '24
+219
در 1 کانال‌ها
Get PRO
نوامبر '24
+224
در 1 کانال‌ها
Get PRO
اکتبر '24
+208
در 0 کانال‌ها
Get PRO
سپتامبر '24
+253
در 0 کانال‌ها
Get PRO
اوت '24
+266
در 0 کانال‌ها
Get PRO
ژوئیه '24
+286
در 0 کانال‌ها
Get PRO
ژوئن '24
+246
در 0 کانال‌ها
Get PRO
مه '24
+192
در 0 کانال‌ها
Get PRO
آوریل '24
+147
در 1 کانال‌ها
Get PRO
مارس '24
+214
در 0 کانال‌ها
Get PRO
فوریه '24
+302
در 0 کانال‌ها
Get PRO
ژانویه '24
+597
در 0 کانال‌ها
Get PRO
دسامبر '23
+207
در 0 کانال‌ها
Get PRO
نوامبر '23
+839
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
28 اکتبر+2
27 اکتبر+1
26 اکتبر+1
25 اکتبر+2
24 اکتبر+1
23 اکتبر0
22 اکتبر0
21 اکتبر0
20 اکتبر0
19 اکتبر+1
18 اکتبر0
17 اکتبر+1
16 اکتبر0
15 اکتبر0
14 اکتبر+1
13 اکتبر+2
\n\nو فایل جاوااسکریپت:\n\n// app.js\nconst form = document.querySelector(\"#todo-form\");\nconst input = document.querySelector(\"#todo-input\");\nconst list = document.querySelector(\"#todo-list\");\n\nconst STORAGE_KEY = \"jsdev_todos\";\nlet todos = loadTodos();\nrender();\n\nform.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n const text = input.value.trim();\n if (!text) return;\n\n todos.push({ id: Date.now(), text });\n input.value = \"\";\n saveTodos();\n render();\n});\n\nlist.addEventListener(\"click\", (e) => {\n if (!e.target.matches(\"button[data-id]\")) return;\n const id = Number(e.target.dataset.id);\n todos = todos.filter((t) => t.id !== id);\n saveTodos();\n render();\n});\n\nfunction loadTodos() {\n const raw = localStorage.getItem(STORAGE_KEY);\n try {\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction saveTodos() {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(todos));\n}\n\nfunction render() {\n list.innerHTML = \"\";\n todos.forEach((todo) => {\n const li = document.createElement(\"li\");\n li.textContent = todo.text + \" \";\n\n const btn = document.createElement(\"button\");\n btn.textContent = \"حذف\";\n btn.dataset.id = todo.id;\n\n li.appendChild(btn);\n list.appendChild(li);\n });\n}\n\nچند نکته ریز ولی مهم 🧠\n• همیشه روی داده localStorage یک try...catch بگذار که اگر خراب شد (مثلاً دستی ویرایش شده بود) اپ کرش نکند.\n• از یک key ثابت مثل jsdev_todos استفاده کن تا اگر بعداً چند بخش دیگر هم اضافه شد، تداخل نداشته باشند.\n• برای id ها اینجا از Date.now() استفاده شده، که برای پروژه‌های کوچک کافی است.\n\nبا همین ساختار پایه می‌شود بعدها checkbox برای completed، فیلتر، و حتی sync ساده با backend هم اضافه کرد. یک بار این نمونه را تا انتها بساز، بعد هر جای اپ‌های واقعی که state و UI sync می‌شوند خیلی قابل فهم‌تر به نظر می‌رسد ⚡️\n\nاگر ساختی و کمی شخصی‌سازی‌اش کردی، نسخه‌ات را برای بقیه بچه‌های جاوااسکریپت هم بفرست؛ همین مثال‌های کوچک کم‌کم تبدیل به component و pattern های جدی‌تر می‌شوند.\n\n🔖 #Javascript #JS #جاوااسکریپت #JavaScript #LocalStorage #DOM #VanillaJS #Frontend\n\n👤 Developix\n\n💎 Channel: @DevelopixJavascript","datePublished":"2026-07-14T17:00:27Z","dateModified":"2026-07-14T17:00:27Z","author":{"@type":"Organization","name":"| کانال توسعه‌دهندگان جاوااسکریپت |","url":"https://telemetr.io/fa/channels/1942875334-developixjavascript","image":"https://img.telemetr.io/c/27u6CW/5823301833593045169?ty=x"},"publisher":{"@type":"Organization","name":"| کانال توسعه‌دهندگان جاوااسکریپت |","url":"https://telemetr.io/fa/channels/1942875334-developixjavascript","image":"https://img.telemetr.io/c/27u6CW/5823301833593045169?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1512},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":8},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":22}]}}]}
پست‌های کانال
🔥 پروژه: اتصال پیام‌رسان‌ها به DeepSeek Harness برای وصل‌کردن بات‌های پیام‌رسان به DeepSeek Harness، پروژهٔ dsh-im مسیر اتصا
🔥 پروژه: اتصال پیام‌رسان‌ها به DeepSeek Harness برای وصل‌کردن بات‌های پیام‌رسان به DeepSeek Harness، پروژهٔ dsh-im مسیر اتصال با اسکن QR یا اطلاعات احراز هویت بات را فراهم می‌کند. پشتیبانی از ۹ پیام‌رسان، از جمله Telegram، Discord، Slack و WhatsApp، آن را برای توسعه‌دهنده‌های جاوااسکریپت که روی بات‌ها و یکپارچه‌سازی سرویس‌ها کار می‌کنند، به گزینه‌ای مرتبط برای بررسی تبدیل می‌کند. برای آشنایی با روش اتصال هر پیام‌رسان، مخزن پروژه را ببینید؛ نقطهٔ شروع خوبی برای بررسی این یکپارچه‌سازی است. ⭐️ 441 stars this week 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #DeepSeek 💎 @DevelopixJavascript

2
🎊 پکیج‌های پرطرفدار UltraGPT 🎁با پکیج‌های ۶۰ روزه‌ UltraGPT به ۳۳ مدل هوش مصنوعی از طریق API دسترسی داشته باشید و در بسته‌ه
🎊 پکیج‌های پرطرفدار UltraGPT 🎁با پکیج‌های ۶۰ روزه‌ UltraGPT به ۳۳ مدل هوش مصنوعی از طریق API دسترسی داشته باشید و در بسته‌های مشمول، دو برابر اعتبار بیشتر دریافت کنید! ✨ امکانات: ✅ استفاده از مدل‌ها در Claude Code، Codex و نرم‌افزارهای محبوب دیگر ✅ امکان دریافت بونس با همراهی و استفاده از سرویس ✅ امکان تست رایگان پیش از خرید ⌛ نمونه‌ای از مدل‌های موجود: 🤖 Fable 5.1 claude-opus-5.5 claude-sonnet-5.5 🤖 gemini-3.8-flash 🤖 gpt-6.1-sol gpt-6-astra 🤖 grok-4.7 و مدل‌های دیگر…  🎁 برای تست سرویس و دریافت API رایگان ۲ دلاری، به پشتیبانی پیام دهید.( امکان تست تمام نسخه ها) ⚙️ مشاهده‌ی جزئیات و پکیج‌ها ا🔤 پشتیبانی و فروش: @UltraGPT_SU ⏺الترا جی پی تی فارسی را دنبال کنید : @UltraGPTiran
311
3
🚦 درخواست‌های موازی، بدون هجوم به سرور وقتی برای ده‌ها آدرس از Promise.all استفاده می‌کنی، شروع هم‌زمان همهٔ درخواست‌ها می‌تواند به سرویس مقصد فشار بیاورد. کتابخانهٔ p-limit تعداد کارهای هم‌زمان را محدود می‌کند؛ بدون اینکه مجبور شوی همه را پشت‌سرهم اجرا کنی. 📦 نصب و نمونه در پروژهٔ دارای ES Modules: // npm install p-limit import pLimit from 'p-limit'; const limit = pLimit(3); const urls = ['/api/users', '/api/posts', '/api/tags']; const data = await Promise.all( urls.map(url => limit(async () => { const res = await fetch(url); if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); })) ); ⚡ حداکثر سه کار هم‌زمان اجرا می‌شوند. تعداد کارهای فعال و منتظر هم قابل مشاهده است. 💡 این ابزار محدودکنندهٔ «درخواست در ثانیه» نیست؛ فقط هم‌زمانی را کنترل می‌کند. مستندات و کد رسمی 🌱 در کارهای دسته‌ای بعدی امتحانش کن؛ از یک سقف کوچک شروع کن. 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Concurrency #p_limit 👤 Developix 💎 Channel: @DevelopixJavascript
608
4
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.10.0 به 26.11.1 🔹 لیست تغییرات این نسخه: - افزودن
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.10.0 به 26.11.1 🔹 لیست تغییرات این نسخه: - افزودن اعتبارسنجی نام و مقدار هدرهای HTTP - پایدار شدن process.ref و process.unref - افزودن محدودیت زمانی اجرای پردازش - ارتقای پشتیبانی Alpine Linux به سطح دوم - افزودن محاسبه طول رشته با Buffer.stringLength - رفع مشکل دسترسی به مستندات و موارد دیگر 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
695
5
🔥 پروژه: مدیریت خودکار یوتیوب با عامل‌های AI برای خودکارسازی کارهای یک کانال یوتیوب، این پروژه از عامل‌های AI استفاده می‌کند
🔥 پروژه: مدیریت خودکار یوتیوب با عامل‌های AI برای خودکارسازی کارهای یک کانال یوتیوب، این پروژه از عامل‌های AI استفاده می‌کند؛ ساخت، بهینه‌سازی و انتشار ویدیو را به‌صورت شبانه‌روزی انجام می‌دهد. با API رایگان Gemini یا OpenAI کار می‌کند و برای استفاده از آن نیازی به کدنویسی نیست. برای توسعه‌دهندگان جاوااسکریپتِ علاقه‌مند به اتوماسیون، نمونه‌ای کاربردی از کنار هم قرار گرفتن عامل‌های AI در یک فرایند تولید محتواست. برای آشنایی با مسیر راه‌اندازی، مخزن پروژه را ببینید 🎬 ⭐️ 275 stars this week 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #YouTube 💎 @DevelopixJavascript
828
6
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.9.0 به 26.10.0 🔹 لیست تغییرات این نسخه: - افزودن
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.9.0 به 26.10.0 🔹 لیست تغییرات این نسخه: - افزودن تابع جدید crypto.parsePKCS12 برای پردازش PKCS12 - قابلیت بارگذاری کتابخانه‌ها از VFS در ffi - اضافه شدن متد fs.openAsBlobSync برای کار با فایل به صورت Blob - امکان ارسال net.BoundSocket به Thread و فرایند فرزند - افزودن SlidingWindowHistogram و تحلیل qrde در perf_hooks - بهبودهای متعدد دیگر در util، sqlite و غیره 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
974
7
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.8.2 به 26.9.0 🔹 لیست تغییرات این نسخه: - افزودن A
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.8.2 به 26.9.0 🔹 لیست تغییرات این نسخه: - افزودن API عمومی برای MAC در ماژول crypto - کشف خودکار cipherها از OpenSSL providerها در crypto - کشف خودکار hashها از OpenSSL providerها در crypto - فعال شدن پیش‌فرض ماژول FFI برای اتصال به کتابخانه‌های بومی - معرفی node:bench و بهبودهای perf_hooks برای بنچمارک - پشتیبانی Web Workers و API آزمایشی DTLS و تغییرات دیگر 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
902
8
وقتی با تاریخ سروکار داری، این که چطور استرینگ رو تبدیل به Date کنی خیلی مهمه. تو نسخهٔ اول، مستقیم از new Date() با یه استری+1
وقتی با تاریخ سروکار داری، این که چطور استرینگ رو تبدیل به Date کنی خیلی مهمه. تو نسخهٔ اول، مستقیم از new Date() با یه استرینگ مبهم استفاده شده؛ این کار بسته‌به محیط و تایم‌زون می‌تونه خروجی متفاوت بده، حتی ممکنه رو بعضی سیستم‌ها Invalid Date برگردونه. تو نسخهٔ دوم، با کمک یه پارسر قابل‌اعتماد (مثل کتابخونه‌های معروف تاریخ) فرمت استرینگ رو صریح مشخص کردیم؛ هم نتیجه پایدارتره، هم باگ‌های خفنِ Production کمتر می‌گیری. اگه با تاریخ و زمان کار می‌کنی، روش دوم رو جایگزین روش اول کن تا رفتارت تو همهٔ محیط‌ها قابل پیش‌بینی باشه و بعداً درگیر باگ‌های مرموز نشی. 🔖 #Javascript #JS #جاوااسکریپت 👤 Developix 💎 Channel: @DevelopixJavascript
947
9
🔥 پروژه: ‎دانلودر TikTok و Douyin ابزار متن‌باز TikTokDownloader برای دانلود و جمع‌آوری داده از ویدئوهای TikTok و نسخه چینی
🔥 پروژه: ‎دانلودر TikTok و Douyin ابزار متن‌باز TikTokDownloader برای دانلود و جمع‌آوری داده از ویدئوهای TikTok و نسخه چینی آن Douyin طراحی شده 🛰️ به‌درد جاوااسکریپتی‌ها برای ساخت کرالرهای شخصی، داشبوردهای آنالیتیکس، تست الگوریتم‌های پیشنهاد محتوا و بازی با متادیتای ویدئوها می‌خورد. سورس تمیز و قابل‌مطالعه است و ایده‌های خوبی برای مهندسی معکوس APIهای پلتفرم می‌دهد. نگاهی بهش انداختن ارزش دارد 👇 لینک گیت‌هاب ⭐️ 154 stars this week 🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #پروژه_متن‌باز 💎 @DevelopixJavascript
828
10
بررسی نوع داده Symbol در جاوا اسکریپت در این مطلب به معرفی نوع داده Primitive و یکتای Symbol، تفاوت آن با سایر انواع داده، نح
بررسی نوع داده Symbol در جاوا اسکریپت در این مطلب به معرفی نوع داده Primitive و یکتای Symbol، تفاوت آن با سایر انواع داده، نحوه استفاده از Global Symbol Registry با متدهای Symbol.for و Symbol.keyFor و همچنین کاربرد Symbol در کپسوله‌سازی و تعریف کلیدهای اختصاصی در اشیا پرداخته شده است. برای مشاهده کامل این آموزش می‌توانید به لینک زیر مراجعه کنید: [https://gnutec.net/javascript-symbol/] 🔖 #Javascript #JS #جاوااسکریپت 👤 ابوالفضل 💎 Channel: @DevelopixJavascript
929
11
یکی از ساده‌ترین تکنیک‌های Refactoring برای تمیزتر شدن کد جاوااسکریپت، استفاده از الگوی Early Return است ✨ در این الگو به‌جای اینکه یک تابع را با if تو در تو و بلاک‌های بزرگ بپیچیم، شرط‌های نامعتبر را زودتر برمی‌گردانیم و مسیر «عادی» تابع را خوانا و سرراست نگه می‌کنیم. نمونه کد شلوغ بدون Early Return 👇 function createOrder(user, items) { if (user) { if (user.isActive) { if (Array.isArray(items) && items.length > 0) { const total = items.reduce((sum, it) => sum + it.price, 0); if (total > 0) { return { userId: user.id, total, status: "CREATED" }; } else { throw new Error("Total must be positive"); } } else { throw new Error("Items required"); } } else { throw new Error("User not active"); } } else { throw new Error("User required"); } } خواندن این تابع سخت است؛ منطق اصلی بین ifهای تودرتو گم شده. همان منطق با Early Return 🧼 function createOrder(user, items) { if (!user) { throw new Error("User required"); } if (!user.isActive) { throw new Error("User not active"); } if (!Array.isArray(items) || items.length === 0) { throw new Error("Items required"); } const total = items.reduce((sum, it) => sum + it.price, 0); if (total <= 0) { throw new Error("Total must be positive"); } return { userId: user.id, total, status: "CREATED" }; } حالا: • تمام شرط‌های نامعتبر بالا جمع شده‌اند و سریع تابع را ترک می‌کنند ✅ • «مسیر خوشحال» وسط تابع مثل یک داستان خطی و قابل‌خواندن است ✅ • دیباگ و لاگ‌گرفتن ساده‌تر شده است ✅ نکته کاربردی در پروژه‌های React / Node.js در هندلرهای API و کنترلرهای Express هم همین الگو کمک زیادی می‌کند تا از callback hell جدید یعنی if hell فرار شود: export const handler = async (req, res) => { const { user } = req; if (!user) { return res.status(401).json({ message: "Unauthorized" }); } if (!user.isActive) { return res.status(403).json({ message: "Inactive user" }); } const data = await loadDashboardData(user.id); return res.json(data); }; در مستندات MDN درباره return و جریان کنترل توضیحات بیشتری آمده که مطالعه‌اش دید خوبی می‌دهد. هرجا تابعی دیدۀ می‌شود که تو در تو و سخت‌خوان است، یک بار با Early Return بازنویسی‌اش، هم برای خودتان هم برای تیم، خوانایی کد را چند درجه بالا می‌برد 🚀 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Refactoring #Early_Return #Node_js #Express #Readability 👤 Developix 💎 Channel: @DevelopixJavascript
1 008
12
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.7.0 به 26.8.1 🔹 لیست تغییرات این نسخه: - رفع مشکل
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.7.0 به 26.8.1 🔹 لیست تغییرات این نسخه: - رفع مشکل نمایش اشتباه نسخه در خروجی node --version 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
899
13
💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است 🔸 ارتقا از نسخه 6.0.3 به 7.0.2 🔹 لیست تغییرات این نسخه: 🔖 #typ
💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است 🔸 ارتقا از نسخه 6.0.3 به 7.0.2 🔹 لیست تغییرات این نسخه: 🔖 #typescript, #web, #js, #react, #vue, #release 💎 @DevelopixJavascript
1 136
14
اصل مهمی در Clean Code این است که هر تابع فقط یک وظیفهٔ واضح داشته باشد ✨ وقتی یک تابع چند کار مختلف انجام می‌دهد: - تست‌نویسی سخت می‌شود - احتمال باگ بالا می‌رود - خواندن و تغییر کد زمان‌بر می‌شود به این ایده در Design Principleها می‌گویند: Single Responsibility Principle (SRP). نمونهٔ یک تابع شلوغ در Node.js 👇 const registerUser = async (req, res) => { const { email, password } = req.body; // validate if (!email || !password || password.length < 8) { return res.status(400).json({ message: 'Invalid data' }); } // check duplicate const existing = await User.findOne({ email }); if (existing) { return res.status(409).json({ message: 'Email exists' }); } // hash password const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); // save user const user = await User.create({ email, password: hashed }); // send welcome email await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); }; این تابع هم اعتبارسنجی می‌کند، هم دیتابیس می‌زند، هم ایمیل می‌فرستد؛ یعنی چند مسئولیت در یک جا. حالا همان منطق را با توابع کوچک‌تر تمیزتر می‌کنیم 🧼 const validateRegisterInput = ({ email, password }) => { if (!email || !password) return 'Email and password are required'; if (password.length < 8) return 'Password too short'; return null; }; const ensureEmailUnique = async (email) => { const existing = await User.findOne({ email }); if (existing) throw new Error('EMAIL_TAKEN'); }; const createUser = async ({ email, password }) => { const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); return User.create({ email, password: hashed }); }; const registerUser = async (req, res) => { const { email, password } = req.body; const error = validateRegisterInput({ email, password }); if (error) return res.status(400).json({ message: error }); try { await ensureEmailUnique(email); const user = await createUser({ email, password }); await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); } catch (err) { if (err.message === 'EMAIL_TAKEN') { return res.status(409).json({ message: 'Email exists' }); } return res.status(500).json({ message: 'Server error' }); } }; حالا: - تست کردن validateRegisterInput و createUser مستقل و ساده است ✅ - تغییر قانون پسورد، فقط در یک تابع انجام می‌شود ✅ - خطاها واضح‌تر و قابل مدیریت‌تر هستند ✅ برای کدهای React، Express، Next.js و هر محیط JavaScript/TypeScript دیگر همین ایده جواب می‌دهد: توابع کوچک، با نام خوب و یک کار مشخص. برای مطالعهٔ بیشتر می‌توان از Refactoring.Guru و MDN کمک گرفت. قدم‌های کوچک refactor کردن همین امروز روی یکی از فانکشن‌های شلوغ پروژه، بعد از چند هفته تاثیر زیادی در خوانایی و کیفیت کد می‌گذارد 🚀 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Node_js #Refactoring #SRP 👤 Developix 💎 Channel: @DevelopixJavascript
1 183
15
🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار
🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار SQL است 🧩 برای وقتی عالی است که قبل از نوشتن کد، اسکیمای دیتابیس پروژه جاوااسکریپتی‌تان (مثلاً با ORMهایی مثل Prisma یا TypeORM) را می‌خواهید شفاف و تمیز طراحی کنید. رابط کاربری خیلی ساده است: جدول می‌سازی، ستون و رابطه می‌کشی و درنهایت اسکریپت SQL ساخت جداول را تحویل می‌گیری. برای دیدن پروژه و دمو، سر بزن به: سورس DrawDB روی گیت‌هاب ⭐️ 665 stars this week 🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #طراحی_دیتابیس 💎 @DevelopixJavascript
990
16
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.6.0 به 26.7.0 🔹 لیست تغییرات این نسخه: - پشتیبانی
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.6.0 به 26.7.0 🔹 لیست تغییرات این نسخه: - پشتیبانی از بارگذاری کلید خصوصی با STORE loaderها در crypto - به‌روزرسانی ریشه‌گواهی‌ها به NSS 3.125 در crypto - افزودن پشتیبانی Perfetto برای پروفایلینگ کارایی - پیاده‌سازی Symbol.dispose در ModuleHooks ماژول‌ها - افزودن فلگ --test-coverage-include-all به test_runner - به‌روزرسانی npm به نسخه 11.19.0 و سایر وابستگی‌ها و غیره 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
1 252
17
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.5.1 به 26.6.0 🔹 لیست تغییرات این نسخه: - افزودن ت
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.5.1 به 26.6.0 🔹 لیست تغییرات این نسخه: - افزودن تابع جدید ffi.getCurrentEventLoop - افزودن context.log() و رویداد test:log در test_runner - گزارش فیلد entryFile در رویدادهای TestStream - بهبودهای کارایی رویدادها و once()/removeListener() - قابلیت انتقال TCP Server و Socket بین worker threads - به‌روزرسانی وابستگی‌ها (npm 11.18.0، V8، OpenSSL، zlib و غیره) 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
1 213
18
در کد زیر یک اشتباه رایج در استفاده از async/await داخل حلقه دیده می‌شود که باعث اجرای سریالی درخواست‌ها و کند شدن شدید برنام+1
در کد زیر یک اشتباه رایج در استفاده از async/await داخل حلقه دیده می‌شود که باعث اجرای سریالی درخواست‌ها و کند شدن شدید برنامه در مواجهه با تعداد آیتم‌های زیاد می‌شود. در نسخه‌ی اصلاح‌شده با استفاده از Promise.all و تبدیل حلقه به مجموعه‌ای از Promiseها، همه‌ی درخواست‌ها به صورت موازی اجرا می‌شوند و در سناریوهایی مثل فراخوانی چندین API مستقل، زمان پاسخ برنامه به شکل چشم‌گیری کاهش پیدا می‌کند. به نمونه‌کد بالا دقت کنید: در چه شرایطی استفاده از Promise.all به جای await داخل حلقه می‌تواند بهترین انتخاب برای بهبود Performance و کاهش زمان اجرای کل عملیات باشد؟ 🔖 #Javascript #JS #جاوااسکریپت 👤 Developix 💎 Channel: @DevelopixJavascript
1 423
19
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀 با خرید اولین سرور ابری غیرساعتی از **هاس
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀 با خرید اولین سرور ابری غیرساعتی از **هاست‌ایران**، بسته ترافیک هدیه مهاجرت به‌صورت خودکار برای سرویس شما فعال می‌شود: ✅ حداقل ۱۰۰ گیگابایت ترافیک هدیه مهاجرت ✅ افزایش حجم هدیه متناسب با ظرفیت دیسک اولیه ✅ ترافیک آپلود رایگان ✅ بدون محدودیت زمانی سرور ابری هاست‌ایران را راه‌اندازی کنید و بکاپ‌ها، فایل‌ها و پایگاه داده خود را بدون دغدغه هزینه‌های پنهان ترافیک منتقل کنید. 👇 مشاهده پلن‌های سرور ابری هاست‌ایران hostiran.club/Migration hostiran.club/Migration
1 487
20
ساخت TODO List یکی از بهترین تمرین‌های واقعی برای جا افتادن مفاهیم DOM، event ها و ذخیره داده‌ها در مرورگر است. این بار بدون React و فریم‌ورک، فقط با Vanilla JS و LocalStorage 💪 منبع اصلی ایده و توضیحات: آموزش MDN درباره Web Storage API و مستندات DOM Manipulation. ایده کلی 👇 یک فرم ساده داریم برای اضافه‌کردن task ها، لیست را با JS توی DOM رندر می‌کنیم و هر تغییری که کاربر می‌دهد را در localStorage ذخیره می‌کنیم تا بعد از refresh هم از بین نرود. نکته خوبش این است که با همین مثال ساده، چند تا چیز مهم جا می‌افتد: • کار با querySelector و ساخت element های جدید • مدیریت event ها مثل submit و click • تبدیل array به string و برعکس با JSON.stringify و JSON.parse • sync نگه‌داشتن UI با state ذخیره‌شده در localStorage یک اسکلت ساده از کد 👇 <!-- index.html --> <form id="todo-form"> <input id="todo-input" placeholder="کار جدید..." /> <button type="submit">اضافه کن</button> </form> <ul id="todo-list"></ul> <script src="app.js"></script> و فایل جاوااسکریپت: // app.js const form = document.querySelector("#todo-form"); const input = document.querySelector("#todo-input"); const list = document.querySelector("#todo-list"); const STORAGE_KEY = "jsdev_todos"; let todos = loadTodos(); render(); form.addEventListener("submit", (e) => { e.preventDefault(); const text = input.value.trim(); if (!text) return; todos.push({ id: Date.now(), text }); input.value = ""; saveTodos(); render(); }); list.addEventListener("click", (e) => { if (!e.target.matches("button[data-id]")) return; const id = Number(e.target.dataset.id); todos = todos.filter((t) => t.id !== id); saveTodos(); render(); }); function loadTodos() { const raw = localStorage.getItem(STORAGE_KEY); try { return raw ? JSON.parse(raw) : []; } catch { return []; } } function saveTodos() { localStorage.setItem(STORAGE_KEY, JSON.stringify(todos)); } function render() { list.innerHTML = ""; todos.forEach((todo) => { const li = document.createElement("li"); li.textContent = todo.text + " "; const btn = document.createElement("button"); btn.textContent = "حذف"; btn.dataset.id = todo.id; li.appendChild(btn); list.appendChild(li); }); } چند نکته ریز ولی مهم 🧠 • همیشه روی داده localStorage یک try...catch بگذار که اگر خراب شد (مثلاً دستی ویرایش شده بود) اپ کرش نکند. • از یک key ثابت مثل jsdev_todos استفاده کن تا اگر بعداً چند بخش دیگر هم اضافه شد، تداخل نداشته باشند. • برای id ها اینجا از Date.now() استفاده شده، که برای پروژه‌های کوچک کافی است. با همین ساختار پایه می‌شود بعدها checkbox برای completed، فیلتر، و حتی sync ساده با backend هم اضافه کرد. یک بار این نمونه را تا انتها بساز، بعد هر جای اپ‌های واقعی که state و UI sync می‌شوند خیلی قابل فهم‌تر به نظر می‌رسد ⚡️ اگر ساختی و کمی شخصی‌سازی‌اش کردی، نسخه‌ات را برای بقیه بچه‌های جاوااسکریپت هم بفرست؛ همین مثال‌های کوچک کم‌کم تبدیل به component و pattern های جدی‌تر می‌شوند. 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #LocalStorage #DOM #VanillaJS #Frontend 👤 Developix 💎 Channel: @DevelopixJavascript
1 512