Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Code Module | کد ماژول (genix)
‏Do not use fs sync methods in Javascript⚡️

زمانی که ماژول fs رو در Node.js فراخوانی میکنیم، یک فهرست طولانی از متد های Syntc بهمون میده مثل: .readFileSync, fs.rmSync, fs.writeFileSync و... خیلی از متد های دیگه شبیه این متد ها هستن. مثلا من میخام یک فایل رو بخونیم:
const file = fs.readFileSync("codemodule.txt")


اگه ما این فایل رو اجرا کنیم واقعا متوجه این کند بودن نمیشیم (جوری که فکر میکنیم دسترسی به فایل ها و خوندن سریع هست)، در حالی که اینگونه نیست! دسترسی به فایل سیستم کند هست و این هم باید در نظر بگیریم که کد های js در بین چندین لایه کد قرار داره (کد های خود js و c++ و...) هرجور بخوایم حساب کنیم در بهترین شرایط باز هم دسترسی به فایل ها کند هست! به عنوان مثال من امروز نیاز داشتم که 10 هزار فایل که حجم هر فایل 10 بایت هست رو ایجاد کنم. پیاده سازی اولیه من با استفاده از fs و متد های Sync بود. وقتی تست رو ران کردم این خروجی بهم داد( به صورت تقریبی هست):

Logging with frequent rotations took 223981~~ ms


چیزی حدود 4 دقیقه طول میکشه و خب خوب نیست. درواقع وقتی ما از متد های Sync استفاده میکنیم ایونت لوپ Nodejs رو متوقف میکنیم و بهش میگیم:"صبر کن کار من تموم شه" که همین باعث میشه چیزی حدود 4 دقیقه کمتر یا بیشتر طول بکشه. اما اگر همین کار رو بدون استفاده از متد ها Sync و از fs.promises استفاده کنیم نتیجه خیلی چشمگیر و بهتر از قبلی هست. که با چنین خروجی احتمالی روبرو میشیم:

Logging with frequent rotations took 7555.057167 ms


چیزی حدود 7 ثانیه که متغیر هست 👀

این یکی از محکم ترین دلایلی هست که "نباید از متد های Sync استفاده کنیم". شما میتونید برای اطلاعات بیشتر مقاله زیر و کد ها رو بخونید (با متد های sync و بدون آنها)

- Article

#nodejs
@CodeModule
Forwarded from Code Module | کد ماژول (genix)
ماژول perf_hooks چیکار میکنه؟ ⚡️

ماژول perf_hooks در Node.js یک ابزار قدرتمند برای نظارت بر عملکرد و بهینه سازی هست. این یک رابط برای اندازه‌گیری عملکرد عملیات مختلف در یک برنامه ارائه میکنه و دولوپر ها رو قادر میسازه تا Bottleneck رو شناسایی، کد رو بهینه و معیارهای کلیدی مثل تاخیرهای حلقه رویداد، زمان‌های اجرای عملکرد و موارد دیگه رو نظارت کنن.

ماژول «perf_hooks» در درجه اول بر روی اندازه‌گیری‌های عملکرد با وضوح بالا تمرکز داره. مثلا با استفاده از روش «performance.now()»، دولوپر ها میتونن فواصل زمانی دقیق تا میکروثانیه رو اندازه‌گیری کنن که برای ردیابی مدت زمان انجام عملیات خاص مفید هست.

- مثال:

     const { performance } = require('perf_hooks');
const start = performance.now();
// Execute some code here
const end = performance.now();
console.log(`Execution took ${end - start} milliseconds.`);


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

#nodejs
@CodeModule
🌿 استفاده از پکیج dotenv در Node.js 🌿

امروز می‌خوایم در مورد پکیج dotenv توی Node.js صحبت کنیم. شاید برات سوال شده باشه که چطوری میشه اطلاعات حساس مثل API key‌ها، پسوردها و تنظیمات مهم رو به‌صورت امن توی پروژه نگه داشت. اینجاست که dotenv میاد وسط و کار رو خیلی راحت می‌کنه! 😎

حالا dotenv چیه؟ 🤔
خب dotenv یه پکیجه که بهت اجازه می‌ده اطلاعات حساس رو توی یه فایل به اسم .env ذخیره کنی. به‌جای اینکه این اطلاعات رو مستقیم توی کدت بنویسی (که خیلی خطرناکه 😱)، می‌تونی توی فایل .env نگه‌شون داری و وقتی اپلیکیشن اجرا میشه، dotenv این مقادیر رو لود می‌کنه ومتغیرهای محیطی  اضافه می‌کنه.

چرا باید از dotenv استفاده کنیم؟ 🔐

1⃣ امنیت بیشتر:
اطلاعات حساس رو مستقیم توی کدت نمی‌نویسی

2⃣ سادگی در مدیریت تنظیماتات:
برای هر محیطی (مثل توسعه، تولید و تست) می‌تونی فایل‌های .env جداگانه داشته باشی

3⃣ خوانایی بهتر کد:
وقتی اطلاعات حساس بیرون از کد اصلی باشه، کد تمیزتر و قابل نگهداری‌تر میشه.

چطوری نصبش کنیم؟ 🛠️
نصب و استفاده از dotenv خیلی ساده‌ست. اول با دستور زیر نصبش کن:
npm install dotenv


نحوه استفاده از dotenv 🚀
بعد از نصب، یه فایل .env توی پروژه‌ات بساز و اطلاعات حساسی مثل API key، پسورد دیتابیس و بقیه تنظیمات رو توش ذخیره کن. مثلا:
DB_HOST=localhost
DB_USER=root
DB_PASS=supersecret


حالا توی app.js (یا هر فایل اصلی پروژه‌ات) باید dotenv رو لود کنی:
require('dotenv').config();


با این کار، dotenv تمام اطلاعات توی فایل .env رو لود می‌کنه و می‌تونی با استفاده از process.env بهشون دسترسی داشته باشی:
const dbHost = process.env.DB_HOST;
const dbUser = process.env.DB_USER;
const dbPass = process.env.DB_PASS;

console.log(`Database: ${dbHost}, User: ${dbUser}`);


نکته مهم 🛑
هیچ‌وقت فایل .env رو توی مخزن گیت (git) قرار نده! چون ممکنه اطلاعات حساسی مثل API key‌هات لو بره. برای جلوگیری از این کار، فایل .env رو به .gitignore اضافه کن:

.env


جمع‌بندی:
پکیج dotenv خیلی به دردبخوره چون هم بهت کمک می‌کنه اطلاعات حساس رو به صورت امن مدیریت کنی و هم کدت تمیزتر و سازمان‌یافته‌تر بشه. پس حتماً توی پروژه‌هات ازش استفاده کن تا هم امنیت بالا بره هم تنظیمات محیطیت راحت‌تر مدیریت بشه. 😁

امید وارم مفید بوده باشه :)

#nodejs #js #dotenv


@ninja_learn_ir
👾 ساخت ربات تلگرام با JavaScript 🤖

برای ساخت ربات تلگرام با جاوا اسکریپت، می‌تونیم از کتابخانه node-telegram-bot-api استفاده کنیم که یکی از محبوب‌ترین راه‌ها برای ساخت ربات تلگرام با Node.js هستش و به شما این اجازه رو ‌میده تا به راحتی ربات‌های تعاملی ایجاد کنید 💥

مزایای استفاده از این کتابخانه

سادگی و سرعت در توسعه: با چند خط کد میتونید ربات تلگرام خودتونو بسازید.

پشتیبانی از API تلگرام: به تمامی امکانات API تلگرام دسترسی دارید.

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

نحوه نصب کتابخانه 🔰

اول از همه باید Node.js رو سیستمون نصب باشه !

حالا با استفاده از npm کتابخانه node-telegram-bot-api رو با استفاده از دستور زیر نصب کنید 🔻

npm install node-telegram-bot-api


ساخت یک ربات ساده تلگرام 🚀

توی این مثال میخوایم یه ربات بسازیم که به دستور /start جواب میده و به کاربر خوشامد می‌گه.

1️⃣ گرفتن توکن API از BotFather
اول باید از BotFather در تلگرام توکن API خود را دریافت کنید. ( آموزش )


2️⃣ نوشتن کد ربات
بعد از دریافت توکن، می‌تونید کد ربات رو با جاوا اسکریپت بنویسید.

برای این کار یک فایل با نام bot.js ایجاد میکنیم و کد زیر رو داخلش قرار میدیم 🔻

const TelegramBot = require('node-telegram-bot-api');

// ایجاد شیء ربات با توکن
const bot = new TelegramBot('YOUR_BOT_TOKEN', { polling: true });

// پاسخ به دستور /start
bot.onText(/\/start/, (msg) => {
bot.sendMessage(msg.chat.id, 'Hey, cooly coder 😎');
});


3️⃣ اجرای ربات
برای اجرای ربات کافیه با Node.js فایلی که ساختیم رو اجرا کنیم 🔻

node bot.js


حالا ربات شما فعاله و اگر در تلگرام دستور /start زو ارسال کنید برای ربات، پیام خوشامدگویی رو دریافت میکنید.

این ربات یک مثال خیلی ساده بود و خودتون میتونید با افزودن ویژگی‌های بیشتر مثل پاسخ به پیام‌ها یا ارسال data به API، ربات‌های خفن تری بسازید 💥

🌐 داکیومنت رسمی node-telegram-bot-api

امیدوارم از این مطلب لذت برده باشید، با ری‌اکشنای خودتون بهمون انرژی بدید ❤️‍🔥

#️⃣ #bot #nodejs #libarary

🚀 @coolycode
Forwarded from Woland's Linux Journal (Woland)
This media is not supported in your browser
VIEW IN TELEGRAM
می‌دونستین در کمتر از ۱۵۰ خط کد جاوااسکریپت، بدون هیچ وابستگی و بسته‌ای از npm می‌تونین اینجور بازی‌هایی رو بسازین؟

در واقع این نشون می‌ده که فقط با نودجی‌اس و بدون نیاز به blessed یا terminal kit میشه هر نوع برنامه ترمینالی ساخت.

چون اگر بتونیم input و state و output رو کنترل کنیم هر کاری میشه انجام داد.

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

گدرت جاوااسکریپت 💪😁

اگه خواستین بگین تا کدش و توضیحاتشو براتون بذارم.

#آموزش #جاوااسکریپت #بازی
#game #javascript #nodejs
ماژول fs در Node.js چیست ؟

ماژول fs (فایل سیستم) در Node.js برای کار با فایل‌ها و دایرکتوری‌ها استفاده می‌شود. این ماژول امکان خواندن، نوشتن، حذف و مدیریت فایل‌ها رو برای شما فراهم می‌کند.

متدهای مهم file system 🚀
fs.readFile(path, callback)
محتوای فایل رو میخونه و در صورت موفقیت آمیز بودن، اون رو به کال‌بک برمی‌گردونه.

fs.writeFile(path, data, callback)
محتوای پارامتر data رو داخل فایل می‌نویسه و فایل رو بازنویسی می‌کنه.

fs.existsSync(path)
به صورت همزمان بررسی می‌کنه که آیا فایل یا دایرکتوری وجود دارد یا خیر.

fs.unlink(path, callback)
برای حذف فایل ها به‌کار میره و میتونید باهاش هر فایلی رو پاک بکنید.

fs.rename(oldPath, newPath, callback)
نام یا مکان یک فایل رو تغییر می‌ده.

fs.mkdir(path, callback)
یک فولدر ( دایرکتوری ) جدید ایجاد می‌کنه.
🌐 مشاهده کامل متد های fs

#️⃣ #WhatsThat | #nodejs #fs

🚀 @coolycode
نود‌جی‌اس ( Node.js ) چیست ؟

نود‌جی‌اس یک محیط اجرایی سرور-محور برای اجرای کدهای جاوااسکریپتیه که به توسعه‌دهندگان این امکان رو می‌ده تا به جای مرورگر، از جاوااسکریپت در سمت سرور استفاده کنند.

ویژگی‌های کلیدی Node.js

📊 مقیاس‌پذیری بالا
معماری Node.js به گونه‌ای طراحی شده که برای برنامه‌هایی که نیاز به مدیریت تعداد زیادی از ارتباطات همزمان (مثل APIها و اپلیکیشن‌های بلادرنگ) دارند، بسیار مناسبه. به همین دلیل Node.js برای ساخت برنامه‌هایی مثل چت‌های بلادرنگ، وب‌سرویس‌های API و برنامه‌های اشتراک‌گذاری فایل بسیار محبوب است.


🚀 سرعت بالا
به دلیل استفاده Node.js از موتور V8 گوگل کروم که کد جاوااسکریپت رو به سرعت به کد ماشین تبدیل می‌کنه، از سرعت بالایی برخورداره. همچنین، با استفاده از معماری غیرهمزمان، درخواست‌ها به صورت کارآمد و بدون نیاز به انتظار مدیریت می‌شوند.


🔺 تک‌پردازشی، ولی بسیار کارا
نود‌جی‌اس تنها از یک رشته (thread) برای اجرای کد استفاده می‌کند، اما به دلیل None-Blocking بودن اون، عملیات سنگین رو به روشی بهینه مدیریت می‌کنه و این باعث می‌شه که مصرف منابع کم باشه و سرورها به سرعت به درخواست‌ها پاسخ دهند.


📦 مدیریت package‌ها با NPM
نود‌جی‌اس با یک سیستم package manager به نام NPM (Node Package Manager) همراه است که بزرگ‌ترین مخزن بسته‌های نرم‌افزاری متن‌باز است. با NPM، توسعه‌دهندگان می‌توانند به راحتی کتابخانه‌های مختلف را نصب و در پروژه‌های خود استفاده کنند.


غیر بلاک کننده ( Non-blocking )
نود‌جی‌اس از یک مدل ورودی/خروجی (I/O) غیربلاک‌کننده و رویداد-محور استفاده می‌کند. این بدان معناست که عملیات ورودی/خروجی (مثل خواندن و نوشتن فایل‌ها یا درخواست‌های شبکه) بدون مسدود کردن فرآیند اصلی انجام می‌شود. این ویژگی باعث می‌شود Node.js بتواند هزاران درخواست را همزمان مدیریت کند بدون اینکه نیاز به منتظر ماندن برای یک عملیات I/O باشد.

🌐 وبسایت رسمی Node.js

⬇️ صفحه دانلود Node.js

امیدوارم حسابی لذت برده باشید، توی پست های بعدی متد های بیشتری از Node.js رو‌ با هم دیگه بررسی میکنیم

#️⃣ #WhatsThat #nodejs #backend

🚀 @coolycode
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
معرفی فریم ورک Express.js

یک فریمورک سبک، سریع و محبوب برای ساخت بکند اپلیکشن اپلیکیشن‌های وب و توسعه Apiها با استفاده از Node.js است.

ویژگی های کلیدی

سادگی : یادگیری و استفاده از Express.js بسیار آسان است.

سرعت : به دلیل ساختار سبک و بهینه، اپلیکیشن‌های ساخته شده با Express.js بسیار سریع هستند.

انعطاف‌پذیری : این فریم ورک به شما آزادی زیادی برای ساخت اپلیکیشن‌های دلخواه می‌دهد.

جامعه بزرگ : یک جامعه بزرگ از توسعه‌دهندگان وجود داره که از Express.js استفاده می‌کنند.


توی این ویدیو یه پروژه ساده با اکسپرس ایجاد کردیم 🚀

#framework #nodejs #backend

Channel | Group | YouTube
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
This media is not supported in your browser
VIEW IN TELEGRAM
سرو کردن فایل‌های HTML در Express.js

توی این ویدیو بهتون یاد دادم که چجوری میتونید خیلی ساده فایل های HTML‌ای سرو بکنید توی اکسپرس و بفرستید سمت کلاینت.

پ.ن : اگر نیاز داشته باشید که یه وبسایت استتیک بسازید با اکسپرس میتونید از این روش استفاده کنید 🚀


🌐 مشاهده کامل ویدیو در یوتوب

اگه به این سبک پستا علاقه داری به چنلمون یه سر بزن 🚀

#️⃣ #nodejs #youtube #backend 

〰️〰️〰️〰️〰️〰️〰️〰️〰️
Channel | Group | YouTube
Forwarded from FullstacksJS — Academy
قسمت چهارم ماب ریویو: معماری نرم افزار و DDD

تو این جلسه یک پروژه NestJS رو با هم ریویو می‌کنیم.

مشاهده ویدئو


اگر علاقه دارید می‌تونید کدهاتون رو برای من بفرستید تا توی این جلسه‌ها با همدیگه ریویوشون کنیم.

مباحث
00:00 ماب ریویو چیه؟
01:06 درباره پروژه؟
02:32 پارادایم Reactive Programming
03:55 معماری های Hexagonal
05:39 تعریف و انواع وابستگی توی معماری
06:55 مفهوم Dependency Inversion
13:41 مفهوم Dependency Injection
17:35 استفاده این مفاهیم توی معماری
20:08 لایه Domain توی معماری Clean
21:10 مزیت نام گذاری روی معماری‌ها و پترن‌ها
21:57 ‏Domain Driven Design چیه؟
34:24 معرفی منابع برای DDD
37:53 پرکیتس ها و اهمیت Communication
42:39 مسئولیت لایه Application
44:43 آنتی پرتن Anemic domain
46:48 مفهوم Ubiquitous language و Bounded Context
53:16 مفاهیم Strategic design و Tactical Design
54:29 فرق بین Value Object و Entity
1:00:42 مفهوم Domain Event
1:02:00 مفهوم Aggregate root
1:05:34 استفاده از این مفاهیم تو NestJS
1:06:53 مفهوم persistence ignorance
1:09:06 بی اهمیت بودن ابزارها و اهمیت نیاز بیزینس
1:12:03 چرا مقایسه ابزارها درست نیست
1:14:29 کجا باید از DDD استفاده کنیم؟
1:15:41 چرا کسب تجربه توی DDD سخته؟
1:16:34 پترن CQRS
1:19:26 چرا نباید همه جا از پترن‌ها و معماری‌ها استفاده کنیم؟


ماب ریویو چیه؟

سورس کد

اضافه کردن به تقویم


#mobreview #nestjs #cqrs #designpatterns #ddd #cleanarchitecture #hexagonarchitecture #mongodb #typescript #nodejs
Forwarded from Code Module | کد ماژول (genix)
میدونستی با Node.js میتونی انیمیشن های جذابی توی ترمینال بسازی؟ 🚀

یکی از کارهایی که میتونید به عنوان سرگرمی انجام بدید، ساخت انیمیشن های ترمینال هست. مقاله vladimirvovk یک راهنمای جامع در مورد چگونگی انجام این کار هست. این مقاله نحوه ساخت digital rain که شبیه به Matrix هست رو نشون میده که با استفاده از process.stdout، اون رو میسازه(البته به صورت کوچیک شده). همچنین یک مقدمه کوتاهی از ANSIS هم داره که کار رو برای ساخت رنگ ها ساده میکنه و میتونید از اون توی انیمیشن هاتون استفاده کنید.

برای اطلاعات بیشتر به این مقاله مراجعه کنید.

#nodejs
@CodeModule
Forwarded from Node Unique
🆕~> انواع معماری‌ها در 👩‍💻 Nodejs: انتخاب بهترین رویکرد برای پروژه. 🧐


⚪️معماری نرم‌افزار یکی از مهم‌ترین عوامل در موفقیت یا شکست یک پروژه است. وقتی صحبت از توسعه‌ی اپلیکیشن‌های مبتنی بر 👩‍💻Node.js می‌شود، انتخاب معماری مناسب می‌تواند عملکرد، مقیاس‌پذیری و نگهداری کد را بهبود بخشد. در این پست، به بررسی رایج‌ترین معماری‌های مورد استفاده در 👩‍💻Nodejs می‌پردازیم. 👍

1️⃣معماری MVC (Model-View-Controller):
⚪️معماری کلاسیک که اپلیکیشن را به سه لایه مدل (مدیریت مدل ها)، نمایش (رابط کاربری)، و کنترلر (مدیریت منطق و واسطه) تقسیم می‌کند.
⚪️مناسب برای پروژه‌های متوسط تا بزرگ که نیازمند کدی سازمان‌دهی‌شده هستند.

2️⃣معماری MVVM (Model-View-ViewModel):
⚪️شبیه به MVC است، اما با تمرکز بیشتر بر داده‌محوری و جداسازی بهتر منطق UI از منطق تجاری.
⚪️معمولاً برای پروژه‌های SPA (تک‌صفحه‌ای) استفاده می‌شود، به ویژه با فریمورک‌هایی مانند 👩‍💻 Vuejs یا 🏤 Angular.

3️⃣معماری لایه‌ای (Layered Architecture):
⚪️این معماری شامل لایه‌های مختلفی مانند کنترلر، سرویس‌ها، و مدل ها است.
⚪️مناسب برای پروژه‌هایی که نیاز به جداسازی وظایف در بخش‌های مختلف دارند.

4️⃣معماری میکروسرویس‌ها (Microservices):
⚪️اپلیکیشن به سرویس‌های کوچک و مستقل تقسیم می‌شود که هرکدام می‌توانند به طور جداگانه توسعه، تست، و مستقر شوند.
⚪️مناسب برای پروژه‌های بزرگ و پیچیده با تیم‌های متعدد.

5️⃣معماری Serverless (بدون سرور):
⚪️کد به صورت تابع‌های کوچک اجرا می‌شود و مدیریت سرورها بر عهده‌ی ارائه‌دهندگان ابری مثل AWS Lambda است.
⚪️برای پروژه‌هایی با نیاز به مقیاس‌پذیری بالا و هزینه‌های پایین مناسب است.

6️⃣معماری Event-Driven (مبتنی بر رویداد):
⚪️با استفاده از رویدادها و پیام‌ها (event emitters) کار می‌کند.
⚪️مناسب برای اپلیکیشن‌های بلادرنگ (real-time) مثل سیستم‌های چت، بازی‌های آنلاین، و اعلان‌ها.

7️⃣معماری Clean (معماری تمیز):
⚪️تأکید بر جداسازی منطق تجاری از زیرساخت‌ها و فناوری‌ها.
⚪️هدف آن ایجاد کدی خوانا، قابل نگهداری و مقیاس‌پذیر است.

8️⃣معماری Hexagonal (شش‌ضلعی):
⚪️به نام Ports and Adapters هم شناخته می‌شود.
⚪️هدف آن انعطاف‌پذیری بیشتر با جداسازی منطق کسب‌وکار از جزئیات تکنیکی است.

9️⃣معماری Monolithic (یکپارچه):
⚪️اپلیکیشن به صورت یک واحد بزرگ ساخته می‌شود.
⚪️مناسب برای پروژه‌های کوچک یا زمانی که نیاز به پیچیدگی کم و استقرار ساده است.

0️⃣1️⃣معماری Modular (ماژولار):
⚪️پروژه به ماژول‌های مستقل تقسیم می‌شود که هرکدام مسئولیت مشخصی دارند.
⚪️برای کدهای با قابلیت استفاده مجدد (reusable code) مناسب است و 🤟 nodejs با فریم ورک های مثل 👩‍💻 nestjs و angular 🏤 استفاده میشه بیشتر.

1️⃣1️⃣معماری CQRS (Command Query Responsibility Segregation):
⚪️وظایف دریافت داده‌ها (Query) و دستکاری داده‌ها (Command) را جدا می‌کند.
⚪️معمولاً در پروژه‌هایی با حجم بالای داده یا نیاز به پردازش پیچیده استفاده می‌شود.

2️⃣1️⃣معماری SOA (Service-Oriented Architecture):
⚪️مشابه میکروسرویس‌ها است، اما سرویس‌ها کمتر مستقل هستند و ارتباطات بیشتری دارند.
⚪️مناسب برای پروژه‌هایی با نیاز به سرویس‌های اشتراکی.

3️⃣1️⃣معماری Multi-Tenant (چند مستأجر):
⚪️برای سیستم‌هایی که به طور همزمان توسط چند کاربر یا شرکت استفاده می‌شوند (مانند SaaS) طراحی شده است.
⚪️مناسب برای پروژه‌های SaaS (نرم‌افزار به‌عنوان سرویس).

4️⃣1️⃣معماری Pipeline (خط لوله):
⚪️داده‌ها به صورت مرحله‌ای پردازش می‌شوند.
⚪️معمولاً در سیستم‌های پردازش داده‌های بزرگ (Big Data) استفاده می‌شود.

♨️~>لپ مطلب:
⚪️هر معماری مزایا و معایب خاص خود را دارد. انتخاب معماری مناسب به نیازهای پروژه، مقیاس آن، و تیم توسعه بستگی دارد. 👍

📣~> اگه موردی بود حتما تو کامنت ها باهام درجریان بزار 👇

#️⃣ #کاربردی #مقاله #معماری_نرم_افزار #nodejs

🔤 @Code_Unique
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Code Module | کد ماژول (genix)
‏Trust Proxy توی Express.js چیه و دقیقاً چه کاری میکنه؟ 🤔

‏Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.

حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطه‌ای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار می‌گیره. Express به‌طور پیش‌فرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.

‏۲. Trust Proxy به چه دردی میخوره؟

وقتی که برنامه‌ شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو می‌بینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای https مقدار http داشته باشه و کلی مشکل دیگه.

اینجاست که Trust Proxy به درد می‌خوره 👇🏻

‏- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.

‏- req.protocol‏ رو بر اساس X-Forwarded-Proto تنظیم میکنه. ‌‌‏
‏- req.hostname رو درست مقداردهی میکنه‏

۳. چجوری Trust Proxy رو توی Express فعال کنیم؟

خیلی ساده!
const app = express();
app.set("trust proxy", true);


با این تنظیم:

‏- req.ip مقدار واقعی آی‌پی کاربر رو میده.
‏- req.protocol مقدار واقعی http یا https رو نشون میده.

اما... فعال کردنش به این سادگی هم نیست! چون ممکنه سرورهای پراکسی مختلفی جلوی اپلیکیشن باشن و تو نیاز داشته باشی مشخص کنی که به کدوم پراکسی‌ها اعتماد داری.


‏ ۴. Trust Proxy چه مقدارهایی میگیره؟


مقدار true همیشه بهترین گزینه نیست. Express چند مدل مقدار رو قبول میکنه:

app.set("trust proxy", false);  // پیش‌فرض، هیچ پراکسی‌ای رو قبول نمی‌کنه.
app.set("trust proxy", true); // به همه پراکسی‌ها اعتماد میکنه.
app.set("trust proxy", "loopback"); // فقط به 127.0.0.1 اعتماد میکنه.
app.set("trust proxy", "127.0.0.1"); // فقط به این IP خاص اعتماد میکنه.
app.set("trust proxy", ["192.168.1.1", "10.0.0.1"]); // لیستی از پراکسی‌های قابل‌اعتماد.
app.set("trust proxy", 2); // از آخرین دو پراکسی مقدار رو می‌خونه.


- مقدار 2 یعنی چی؟
وقتی مقدار 2 رو میدید، Express میاد ip واقعی کاربر رو از دو پراکسی آخر توی X-Forwarded-For استخراج میکنه. این کار به درد جایی میخوره که چند تا سرور بین کاربر و اپلیکیشن هستن.

- پس مقدار true بدیم یا نه؟
بهتره فقط به پراکسی‌هایی که می‌شناسی اعتماد کنید. مثلاً اگه سرور فقط Cloudflare یا Nginx قرار داره، میتونید فقط به اون آی‌پی‌ها اعتماد کنین تا از IP Spoofing جلوگیری بشه.


‏Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسی‌ای اعتماد نکنید! برای امنیت بیشتر، فقط به آی‌پی‌هایی که واقعاً Proxyهای خودتون هستن اجازه بدید.

برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.

#nodejs #express
@CodeModule