NodeCraft 💻
Открыть в Telegram
حرفه ای بک بزنیم ... چت برنامه نویسی👇👇👇 @prog_comunity @MsDev18 @Hna_dev @UserCoder
Больше260
Подписчики
Нет данных24 часа
-17 дней
-1030 день
Загрузка данных...
Похожие каналы
Нет данных
Возникли проблемы? Пожалуйста, обновите страницу или обратитесь к нашему support-менеджеру .
Облако тегов
Входящие и исходящие упоминания
---
---
---
---
---
---
Привлечение подписчиков
август '25
август '25
+157
в 0 каналах
июль '250
в 3 каналах
Get PRO
июнь '25
+77
в 0 каналах
Get PRO
май '250
в 0 каналах
Get PRO
апрель '25
+45
в 0 каналах
| Дата | Привлечение подписчиков | Упоминания | Каналы | |
| 31 августа | 0 | |||
| 30 августа | 0 | |||
| 29 августа | 0 | |||
| 28 августа | +3 | |||
| 27 августа | 0 | |||
| 26 августа | 0 | |||
| 25 августа | +1 | |||
| 24 августа | 0 | |||
| 23 августа | 0 | |||
| 22 августа | 0 | |||
| 21 августа | 0 | |||
| 20 августа | 0 | |||
| 19 августа | 0 | |||
| 18 августа | 0 | |||
| 17 августа | +2 | |||
| 16 августа | 0 | |||
| 15 августа | 0 | |||
| 14 августа | 0 | |||
| 13 августа | 0 | |||
| 12 августа | 0 | |||
| 11 августа | 0 | |||
| 10 августа | 0 | |||
| 09 августа | 0 | |||
| 08 августа | +1 | |||
| 07 августа | 0 | |||
| 06 августа | 0 | |||
| 05 августа | 0 | |||
| 04 августа | 0 | |||
| 03 августа | 0 | |||
| 02 августа | +1 |
Посты канала
| 2 | جدیدا گیت هاب احراز هویت به روش 2FA رو اجباری کرده
روش اول : احراز هویت با اسکن Qr code از طریق اپلیکیشن
روش دوم : کد یکبار مصرف
که اگر عین من اپلیکیشن رو نداشته باشی کارت گیره چون شماره ایران تحریمه و ساپورت نمیشه | 248 |
| 3 | البته تجربه شخصی من هست
و امیدوارم بدردتون بخوره | 212 |
| 4 | اگر قصد شروع دوره ای رو دارید
سعی کنید دوره های سایت کوئرا رو ببینید
به واسطه شرکت هایی که باهاشون همکاری میکنن احتمال استخدام یا کاراموزیتون خیلی بالاس | 326 |
| 5 | Black Hat Go.pdf | 292 |
| 6 | Black Hat Go.pdf | 1 |
| 7 | این همه راجب سیستم di(تزریق وابستگی) NestJs صحبت میشه، بریم ببینیم چی هست ؟
• نست چرا class-base هست ؟ چون توی سیستم DI باید بتونه از هر چیزی که قراره تزریق بشه (یعنی providerها: سرویسها، کنترلرها، حتی خود ماژولها) یه نمونه مستقل بسازه و تزریق کنه. برای همین فقط کلاسهایی که دکوریتور @Injectable() دارن وارد این چرخه میشن (مثلاً DTOها چون این دکوریتور رو ندارن، تزریق نمیشن).
خب بریم باهم مراحل تزریق رو ببینیم !
1. جمع آوری Providerها:
سیستم DI، همه کلاسهایی که @Injectable() (یا @Controller,...) دارن رو شناسایی میکنه. اگه لازم بشه، از هر provider فقط یه نمونه (singleton) میسازه (البته این کار معمولاً lazily انجام میشه، یعنی زمانی نمونه میسازه که واقعاً جایی لازم بشه نه همون اول ! )
2. حل وابستگیها (Dependency Resolution):
نست با بررسی constructor تمام providerها، یک درخت وابستگی درست میکنه و این وابستگیها رو به روش عمقی (depth-first) resolve میکنه. اگه چیزی پیدا نشه یا dependency اشتباه باشه، همونجا throw میکنه! مسیر حل، ربطی به ترتیب providerها توی آرایه نداره؛ Nest از token خاص هر کلاس استفاده میکنه و ترتیب مهم نیست.
3. حالا همه چیز برای تزریق آمادس !:
وقتی نیاز باشه، Nest یه نمونه از هر dependency میسازه و هر جا نیاز باشه تزریق میکنه. این نمونه بهطور پیشفرض singleton هست. البته میتونی خودت مشخص کنی یه provider transient باشه (برای هر درخواست نمونه جدید بسازه) یا request-scoped (برای هر درخواست HTTP).
4. چجوری بفهمیم کدوم provider باید تزریق شه ؟:
نست ، برای شناسایی هر dependency فقط به اسم کلاس یا typeش متکی نیست، بلکه با token مخصوص (که معمولاً همون کلاس هست) و متادیتای دکوراتور (مثلاً @Inject) کار میکنه. پس حتی اگه دو تا provider اسم یکسان داشته باشن، میشه token اختصاصی براشون ساخت.
5. چرا ترتیب providerها مهم نیست؟
چون Nest فقط دنبال وجود اون token توی ماژول میگرده، نه ترتیب قرار گرفتن توی آرایه providerها. | 290 |
| 8 | #cheat_sheat | 436 |
| 9 | 🍪 تصور کن یه روز یکی از دوستات برات یه شیرینی میفرسته، اما ناخواسته اون شیرینی ممکنه آلوده باشه و بهت آسیب بزنه!
تو دنیای وب، همین اتفاق با کوکیها میافته وقتی بدون کنترل درست، سایتها از کوکیها سوءاستفاده میکنن.
➖➖
🔒 SameSite Cookie چیه؟
یه ویژگی امنیتیه که به مرورگر میگه: «این کوکی فقط وقتی فرستاده بشه که درخواست از همون سایت (origin) باشه.»
این باعث میشه کوکیها تو درخواستهای cross-site ارسال نشن و جلوی حملات CSRF (Cross-Site Request Forgery) گرفته بشه.
➖➖
👁🗨 تجربه کلیدی:
استفاده از SameSite برای کوکیها، یه لایه محافظتی ساده ولی موثره که میتونه جلوی خیلی از سوءاستفادهها تو اپلیکیشنهای وب رو بگیره.
این تنظیم رو جدی بگیر و حتما تو پروژههات فعال کن. | 509 |
| 10 | 📝یه سری ویژگی های 2024 js :
🔹 Object.groupBy()
یه تابع خیلی باحال برای دستهبندی آبجکتها:
const fruits = [
{name:"apples", quantity:300},
{name:"bananas", quantity:500},
{name:"oranges", quantity:200},
{name:"kiwi", quantity:150}
];
const result = Object.groupBy(fruits, ({quantity}) => quantity > 200 ? "ok" : "low");
// نتیجه میشه آبجکتی که میگه این میوهها "ok" هستن یا "low"
اصلش اینه که آرایهت رو میبره، فیلتر میزنه، و خروجی یه آبجکت دستهبندی شده میگیری. تغییرات توی دیتا اصلی هم اعمال میشه چون رفرنسشون همونه .
🔹 Map.groupBy()
دقیقاً مثل Object.groupBy ولی خروجیش Map هست. یعنی به جای { ok: [...], low: [...] } Map داری با کلید و مقدار مشابه. خیلی بدرد بلاگ و دیتای ساختارمند میخوره .
🔹 Temporal API
یه سری کلاسهای جدید برای کار با تاریخ/زمان بدون دردسر:
Temporal.PlainDate(2024,5,1) — فقط تاریخ بدون ساعت
Temporal.PlainTime(10,30) — فقط ساعت
Temporal.PlainMonthDay(5,1) — روز و ماه
Temporal.PlainYearMonth(2024,5) — سال و ماه همشون کمک میکنن بدون دردسر درگیر timezone یا محاسبات سخت تاریخ نشیم .
---
⚠️ نکته مهم
این ویژگیها نو هستند و ممکنه روی مرورگرای قدیمی اجرا نشن. پس یا از polyfill استفاده کن یا چک کن مرورگرت پشتیبانی کنه .
منبع : https://www.w3schools.com/js/js_2024.asp | 644 |
| 11 | تو مجبوری موفق بشی وگرنه تمام رنجی که تا حالا کشیدی فقط رنج بوده. | 679 |
| 12 | یه چیز عجیب تو جاوااسکریپت اینه که وقتی ازش میپرسی نوع null چیه، میگه object! یعنی:
console.log(typeof null); // "object"
در حالی که null یعنی «هیچی» یا «خالی»، پس چرا میگه object؟
داستانش برمیگرده به اوایل ساخته شدن جاوااسکریپت. اون موقع یه اشتباه تو طراحی زبان بوده که null رو مثل یه آبجکت در نظر گرفته. بعدش که فهمیدن اشتباهه، چون کلی از پروژهها از همین رفتار استفاده کرده بودن، دیگه نتونستن درستش کنن. پس هنوزم این باگ قدیمی باقی مونده.
خلاصه که...
typeof null === "object" یه باگ قدیمیه، نه یه ویژگی واقعی! | 770 |
| 13 | ماژول داخلی crypto در Node.js برای انجام عملیات رمزنگاری استفاده میشود. یکی از کاربردهای مهم آن، هشکردن پسوردهاست.
هش کردن پسورد با استفاده از الگوریتم SHA-256:
const crypto = require('crypto'); const password = 'mySecret123'; const hash = crypto.createHash('sha256').update(password).digest('hex'); console.log('Hashed password:', hash);
در این کد:
createHash('sha256') الگوریتم هش را مشخص میکند.
update(password) مقدار ورودی برای هش شدن است.
digest('hex') خروجی هش را به صورت رشتهی هگزادسیمال تولید میکند.
استفاده از crypto برای هشکردن اطلاعات حساس مانند رمز عبور، در افزایش امنیت اپلیکیشن نقش مهمی دارد. | 717 |
| 14 | نسخه پریمیوم cursor ai
تستش نکردم
ببینید کار میکنه یا نه | 633 |
| 15 | https://github.com/yeongpin/cursor-free-vip | 648 |
| 16 | جدیدا نسل جدیدی از ide ها اومده که از vscode
فورک گرفته شده و تو خودش هوش مصنوعی داره
دو تا از معروفت ترین هاش که حسابی سر و صدا به پا کرده cursor , windsurf هست
خوبیش نسبت به بقیه هوش مصنوعی ها چیه ؟
این هوش مصنوعی ها مخصوص برنامه نویس هاست و طوری طراحی شده که انگار داری با یه برنامه نویس سینیور و حرفه ای صحبت میکنی
مثلا داخل windsurf میخوای یک ماژول برای محصولات بنویسی
کاری که میکنه اینه میاد کل پروژه رو آنالیز میکنه و اون ماژولی که میخواستی رو مینویسه حتی بهتر از چیزی که تو ذهنت بود
چنل 👇👇👇
https://t.me/nest_core
گروه 👇👇👇
https://t.me/prog_comunity | 830 |
| 17 | یه پست خیلی خفن تو راهه 🫵 | 398 |
| 18 | ۴ ویژگی جدید و کاربردی JavaScript که توی نسخه های جدید بهش اضافه شدن
۱. Array.prototype.at() — دسترسی با اندیس منفی
نسخه 2022
const arr = [10, 20, 30, 40]; console.log(arr.at(-1)); // ۴۰
حالا میتونی راحت به آخرین عنصر آرایه دسترسی داشته باشی؛ بدون نوشتن
۲. Object.hasOwn() — بررسی وجود کلید در آبجکت
نسخه 2022
const user = { name: "تست" }; console.log(Object.hasOwn(user, "name")); // true
جایگزین امنتر و جدیدتر برای hasOwnProperty — بدون دردسر ارثبری یا خطا.
۳. Error.cause — علت دقیق خطاها رو مشخص کن
نسخه 2022
try { throw new Error("خطای اصلی", { cause: "مشکل در اتصال" }); } catch (e) { console.log(e.message); // خطای اصلی console.log(e.cause); // مشکل در اتصال }
وقتی خطا رو از تابعی میگیری، با cause میتونی علت اصلی رو هم ضمیمه کنی. دیباگ سادهتر!
۴. findLast() — پیدا کردن آخرین مقدار مطابق شرط
نسخه 2023
const nums = [2, 4, 6, 8, 9]; const lastOdd = nums.findLast(n => n % 2 !== 0); console.log(lastOdd); // ۹
برخلاف find()، از آخر آرایه شروع میکنه. مخصوصاً وقتی دادههات طولانیان، خیلی مفیده! | 776 |
| 19 | چی هست این Promise که همه ازش حرف میزنن؟
وقتی توی JavaScript با عملیاتهایی سر و کار داریم که زمانبر هستن، مثل خوندن فایل، ارتباط با سرور یا دیتابیس، نمیخوایم برنامهمون متوقف بشه تا اون کار انجام بشه. Promise برای همین ساخته شده!
Promise یعنی یه قول:
یه قول که یا بهش عمل میشه (✅ resolve) یا شکسته میشه (❌ reject).
هر Promise سه حالت میتونه داشته باشه:
Pending (در حال انتظار): هنوز مشخص نیست قراره چی بشه
Fulfilled (با موفقیت انجام شده): عملیات موفق بوده
Rejected (با شکست مواجه شده): عملیات شکست خورده
یه مثال ساده:
const getData = () => {
return new Promise((resolve, reject) => {
const success = true;
if (success) {
resolve("دیتا با موفقیت دریافت شد!");
} else {
reject("یه مشکلی پیش اومد.");
}
});
};
getData()
.then((data) => console.log("Success:", data))
.catch((err) => console.log("Error:", err));
چرا Promise از callback بهتره؟
تا قبل از Promise، مجبور بودیم از callback استفاده کنیم که وقتی تودرتو میشدن، تبدیل میشدن به یه هیولا به اسم Callback Hell!
Promiseها کمک کردن تا:
کدمون مرتبتر باشه
مدیریت خطا راحتتر بشه
خوندن و فهمیدن کد راحتتر بشه
#Promise
#AsyncCode
#WebDevelopment
#AsynchronousProgramming | 663 |
| 20 | فصل ۵ – مقدمهای بر برنامههای MVC
وقتی یه وباپلیکیشن میسازیم، میتونیم کل کد رو توی یه فایل بنویسیم، ولی اگه این فایل کلی کد داشته باشه، پیدا کردن خطا خیلی سخت میشه. یه راه بهتر اینه که کد رو به چند بخش تقسیم کنیم. یکی از رایجترین روشهای سازماندهی کد، معماری مدل-ویو-کنترلر (MVC) هست.
ـ MVC یعنی چی؟
ـ MVC یه الگوی طراحی نرمافزاره که برنامه رو به سه بخش اصلی تقسیم میکنه:
- مدل (Model): مسئول دادهها و منطق برنامهست. مثلا اگه یه فروشگاه آنلاین داشته باشیم، اطلاعات محصول مثل اسم، قیمت و موجودی، داخل مدل نگهداری میشه.
ویو (View): همون بخشیه که کاربر میبینه، یعنی رابط کاربری. مثلا صفحهای که محصولات رو نشون میده، جزو ویو حساب میشه.
کنترلر (Controller): بین مدل و ویو ارتباط برقرار میکنه. مثلا وقتی کاربر یه محصول رو اضافه میکنه، کنترلر این درخواست رو پردازش میکنه، به مدل میگه داده جدید رو ذخیره کنه و به ویو دستور میده که اطلاعات رو بهروز کنه.
چرا MVC مفیده؟
- باعث جدا شدن بخشهای کد میشه و این یعنی نگهداری و توسعه راحتتره.
- تیمهای مختلف میتونن همزمان روی بخشهای مختلف کار کنن، مثلا یه نفر روی ویو کار کنه و یکی دیگه روی مدل.
- خطاها راحتتر پیدا میشن، چون هر بخش وظیفه مشخصی داره.
ـ MVC در عمل چجوری کار میکنه؟
فرض کن یه کاربر از طریق مرورگر یه درخواست میفرسته (مثلا میخواد لیست محصولات رو ببینه):
1. درخواست از طریق HTTP به سرور ارسال میشه.
2. سرور درخواست رو به کنترلر میفرسته. کنترلر میفهمه که کاربر چی میخواد و به مدل سر میزنه تا اطلاعات محصولات رو بگیره.
3. مدل دادهها رو از دیتابیس میگیره و به کنترلر برمیگردونه.
4. کنترلر دادهها رو پردازش میکنه و به ویو میفرسته.
5. ویو اطلاعات رو به شکل یه صفحه HTML به کاربر نشون میده.
ساختار پروژه در NestJS
در NestJS، معماری MVC به کمک ماژولها و کنترلرها پیادهسازی میشه. برای مثال، اگه یه فروشگاه آنلاین داشته باشیم:
- یه ماژول به اسم products.module.ts داریم که بخش محصولات رو مدیریت میکنه.
- کنترلر products.controller.ts درخواستهای مربوط به محصولات رو پردازش میکنه.
- مدل product.entity.ts هم اطلاعات محصولات رو نگه میداره.
- در نهایت، اطلاعات پردازششده از طریق یه ویو (مثلا با Handlebars) به کاربر نمایش داده میشه.
نتیجهگیری
معماری MVC باعث میشه که پروژههای وبمون تمیزتر، قابلتوسعهتر و منظمتر باشن. این مدل توی کلی فریمورک محبوب مثل NestJS، Express و Angular هم استفاده میشه و یادگیریش برای یه بکاند دولوپر خیلی مهمه. | 426 |
