NodeCraft 💻
رفتن به کانال در Telegram
حرفه ای بک بزنیم ... چت برنامه نویسی👇👇👇 @prog_comunity @MsDev18 @Hna_dev @UserCoder
نمایش بیشتر260
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
-1030 روز
آرشیو پست ها
260
داشتم فصلای کتابو نگاه میکردم فکر کردم که خوب میشه اگه بعضی وقتا یه فصلو بخونم و خلاصشو اینجا بزارم
تصمیم گرفتم از فصل ۵ شروع کنم یه چیزایی بزارم 👇🏼
260
مقایسهی Express.js و NestJS :
فریم ورک Express.js یک فریمورک ساده و مینیمال برای Node.js است که آزادی کامل برای پیادهسازی API ها را فراهم میکند.
فریم ورک NestJS یک فریمورک مدرن و مقیاسپذیر است که روی Express ساخته شده و از TypeScript، معماری ماژولار و تزریق وابستگی پشتیبانی میکند.
مقایسهی کلی :
✓ Express.js 👇👇👇
سبک، سریع، قابل شخصیسازی، مناسب پروژههای کوچک و متوسط
✓ NestJS 👇👇👇
ساختاریافته، ماژولار، بهینه برای توسعهی تیمی، مناسب پروژههای سازمانی و بزرگ
نمونه کد یک سرور ساده در Express و NestJS
Express.js 👇👇👇
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello from Express!'); }); app.listen(3000, () => console.log('Server running on port 3000'));
Nest js👇👇👇
import { Controller, Get } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
@Controller()
class AppController {
@Get()
getHello () {
return 'Hello from NestJS!'
}
}
@Module({
imports : [ ] ,
controller : [AppController] ,
provider : [ ]
})
class AppModule {}
const bootstrap = async () =>{
const app = await NestFactory.create(AppModule); await app.listen(3000); };
bootstrap()
چه زمانی از هر کدام استفاده کنیم؟
✓ Express:
برای پروژههای ساده و MVPها
✓ NestJS:
برای اپلیکیشنهای بزرگ و سازمانی
نظر شما در مورد این دو فریمورک چیه؟260
+1
روش دوم :
تمامی دپندسی ها رو تو ماژول هایی که نیاز داریم ایمپورت کنیم و داخل provider ها و ... استفاده کنیم 👀🗿🗿
تو این روش پیچیدگی تو پروژه ایجاد میشه ممکنه قسمتی رو یادتون بره و بهتون ارور نده
جدا از اینکه باعث میشه حجم زیادی کد به پروژه اضافه بشه
#Nestjs
#Module
260
+1
روش اول (اصولی) :
دپندسی هایی که در ماژول auth نوشته شده رو مثل تصویر export بگیریم
منظور از دپندسی وابستگی هایی از پروژه که بدون اون برنامه به ارور میخوره
مثلا تو این تصویر دپندسی هایی که داریم typeorm module , auth service , tokens service , jwt module هست
بعد از اکسپورت کافیه کل ماژول auth رو داخل قسمت import در ماژول های دیگه بندازیم
#Nestjs
#Module
260
در NestJS، ماژول ها (Modules) یکی از مفاهیم کلیدی هستند که برای سازماندهی و ماژولار کردن کد استفاده میشوند.
اما این ماژول ها دقیقا چه کاری انجام میدن ؟
فرض کنید یک برنامه ای نوشتید و یکی از قسمت های اون برای authentication, authorization هست و در قسمت دیگه برنامه متد هایی که در ماژول auth نوشته شده رو نیاز دارید
تو این قسمت دو تا روش وجود داره که میتونید استفاده کنید 👇👇👇
#Nestjs
#Module
260
تفاوت نوع داده rune , string در Go :
در زبان گو برای دریافت رشته ها دو راه وجود دارد
یکی نوعی داده rune و اون یکی string هست
package main
import (
"fmt"
)
func main () {
str := "سلام گو 🥰🥺"
// len = 22
fmt.Printf("%v %d",str,len(str))
}
اگر تعداد خونه های ارایه رو بشماریم len = 10 میشه
خب اینجا چه اتفاقی میوفته ؟
الان تابع len() تعداد بایت هایی از حافظه که این استرینگ اشغال کرده رو میده
اما دلیلش چیه ؟
در دنیای کامپیوتر هر حرف کیبورد یک کد عددی داره
حروف و کاراکتر های انگلیسی از نوع uint8 هست
یعنی این حروف در رنج 0 تا ۲۵۵ قرار میگیره
اما کد حروف فارسی اعداد بزرگتری هستند و مقدار بیشتری حافظه اشغال میکنن
استفاده از نوع داده rune :
package main
import "fmt"
func main () {
var txt string = "سلام گو 🥰🥺"
rn := []rune(txt)
fmt.Printf("rune => %v , len => %d", rn , len(rn))
// [1587 1604 1575 1605 32 1711 1608 32 129392 129402], 10
}
الان میبینیم که ظرفیت ارایه چیزی هست که انتظار داشتیم
در واقع rune مقدار استرینگ ما رو به int32 تبدیل میکنه
#Go
#rune
#string260
یه کتاب خوب و جامع که برای یادگیری nest پیدا کردمو میزارم استفاده کنید
چون خیلی ساده توضیح داده بود بنظرم حتی اگه زبانتون سطحش خیلی بالا هم نباشه بازم میفهمینش
#Nestjs
#book
260
تابع مرتبه بالا (High-Order Function) چیه؟
تابع مرتبه بالا تابعیه که یا یک تابع دیگه رو بهعنوان ورودی میگیره، یا یک تابع جدید برمیگردونه، یا هر دو کارو انجام میده. این مفهوم یکی از بخشهای مهم برنامهنویسی تابعیه و باعث خواناتر و بهینهتر شدن کدها میشه.
چرا توابع مرتبه بالا مهم هستن؟
باعث سادهتر شدن و کاهش تکرار کد میشن.
قابلیت استفاده مجدد کد رو افزایش میدن.
کدنویسی رو تمیزتر و خواناتر میکنن.
مثالهای کاربردی
تابعی که یه تابع رو بهعنوان ورودی میگیره
فرض کن یه آرایه از اعداد داریم و میخوایم همهی عناصرش رو به توان دو برسونیم.
const numbers = [1, 2, 3, 4, 5];
const squared = numbers.map(num => num * num); console.log(squared); // [1, 4, 9, 16, 25]
در اینجا، map یه تابع دریافت میکنه و روی هر مقدار آرایه اعمال میکنه.
تابعی که یه تابع رو برمیگردونه
گاهی نیاز داریم یه تابع بسازیم که بر اساس مقدار ورودی، رفتار متفاوتی داشته باشه.
function multiplier(factor) { return function(number) { return number * factor; }; } const double = multiplier(2); console.log(double(5)); // 10
تابع multiplier یه مقدار ورودی میگیره و یه تابع جدید برمیگردونه که مقدار ورودی رو در اون عدد ضرب میکنه.
توابع معروف filter و reduce
filter برای فیلتر کردن مقادیر آرایه استفاده میشه.
const numbers = [10, 25, 30, 47]; const evenNumbers = numbers.filter(num => num % 2 === 0); console.log(evenNumbers); // [10, 30]
اینجا فقط اعدادی که زوج هستن در آرایه باقی میمونن.
reduce برای کاهش یک آرایه به یک مقدار استفاده میشه.
const numbers = [1, 2, 3, 4]; const sum = numbers.reduce((acc, num) => acc + num, 0); console.log(sum); // 10
اینجا reduce همهی مقادیر رو با هم جمع کرده و یک مقدار نهایی برمیگردونه.
جمعبندی
توابع مرتبه بالا توابعی هستن که تابع دیگهای رو میگیرن یا برمیگردونن.
این توابع در برنامهنویسی تابعی بسیار پرکاربرد هستن.
map، filter و reduce از توابع مرتبه بالا در جاوااسکریپت هستن که باعث کوتاهتر و خواناتر شدن کد میشن.260
استریم (Streams) در Node.js
استریم رو میشه بهعنوان روشی برای خواندن و نوشتن دادهها بهصورت تکهتکه و پیوسته در نظر گرفت. مثلا وقتی یک فایل بزرگ رو میخواهی بخونی، اگر بخوای کل فایل رو یکدفعه بخونی، ممکنه حافظه پر بشه، ولی استریم این مشکل رو حل میکنه.
استریمها در Node.js چهار نوع دارن:
Readable: فقط برای خوندن دادهها.
Writable: فقط برای نوشتن دادهها.
Duplex: هم برای خوندن و هم برای نوشتن دادهها.
Transform: دادهها رو تغییر میده.
مثال کاربردی: خواندن یک فایل بزرگ با استفاده از استریم
const fs = require("fs"); const stream = fs.createReadStream("bigfile.txt", "utf8"); stream.on("data", (chunk) => { console.log("دریافت داده:", chunk); }); stream.on("end", () => { console.log("خواندن فایل تموم شد."); });
چرا استریم مهمه؟
• به شما این امکان رو میده که فایلهای بزرگ رو با مصرف کم حافظه بخونید.
• برای کار با ویدیو، صدا و دادههای حجیم خیلی مناسبتره.
• کارایی برنامه رو بهبود میده.
#Nodejs #Streams #Asynchronous #WebDevelopment260
اگر علاقه مند به یادگیری این زبان بودید میتونید از این کتاب استفاده کنید
https://book.gofarsi.ir/
#Go
#book
260
اگر دوست دارید یه زبان با پرفورمنس بالا و سادگی در نوشتن یاد بگیرید Go میتونه یکی از انتخاب های شما باشه
زبانی نسبتا جدید و در حال رشد هست که پرفورمنسی بالا تر از java و c#
چرا Go ؟
✅ سادگی و خوانایی بالا – سینتکس ساده و قابل فهم Go باعث میشود که حتی تازه کارها هم بتوانند به سرعت آن را یاد بگیرند.
✅ سرعت و کارایی بالا – Go مستقیماً به کد ماشین کامپایل میشود، که آن را سریعتر از زبانهای مفسری مثل Python میکند.
✅ مدیریت خودکار حافظه (Garbage Collection) – مانند زبانهای مدرن، Go از مدیریت حافظه هوشمندانهای برخوردار است.
✅ پشتیبانی قوی از همزمانی (Concurrency) – با قابلیت goroutines، Go یکی از بهترین زبانها برای برنامههای چندپردازشی و مقیاسپذیر است.
✅ محبوب در صنعت – بسیاری از شرکتهای بزرگ مانند Google، Uber، Docker، Kubernetes و Cloudflare از Go استفاده میکنند.
از مزایای Go گفتیم ولی این زبان معایبی هم داره یکی از این معایب کم بودن توسعه دهنده Go هست به خصوص در ایران (رشدی که در سطح جهانی داشته در ایران را نداشته)
#Go
260
Non-Blocking I/O در Node.js چیه و چرا مهمه؟
فرض کن توی یه رستوران کار میکنی و مسئول گرفتن سفارشها هستی. اگه روش کار رستوران اینجوری باشه که تا غذای یه مشتری حاضر نشه، نتونی سفارش بعدی رو بگیری، کلی صف طولانی ایجاد میشه! این همون مدل Blocking I/O هست. اما اگه بتونی سفارش بگیری، بدی دست آشپزخونه و در همین حین سفارش بعدی رو بگیری، همه چی سریعتر پیش میره. این همون Non-Blocking I/O توی Node.js هست!
🚀 تفاوت Blocking و Non-Blocking I/O
📌 روش Blocking (همگام - Synchronous)
برنامه تا وقتی که یه کار تموم نشه، سراغ کار بعدی نمیره.
const fs = require("fs");
console.log("۱. شروع خواندن فایل...");
const data = fs.readFileSync("file.txt", "utf8"); // برنامه تا زمانی که فایل خونده نشه متوقف میمونه
console.log("۲. محتوای فایل:", data);
console.log("۳. پایان پردازش");
⏳ 📌 خروجی (برنامه گیر میکنه تا فایل خونده بشه):
۱. شروع خواندن فایل... (منتظر میمونه تا فایل خونده بشه...) ۲. محتوای فایل: محتوای داخل فایل ۳. پایان پردازش❌ مشکل: اگه فایل بزرگ باشه یا خونده شدنش طول بکشه، کل برنامه قفل میشه و هیچ کار دیگهای انجام نمیشه. 📌 روش Non-Blocking (غیرهمگام - Asynchronous) برنامه درخواست رو میفرسته و بدون معطل شدن، سراغ بقیه کارها میره.
const fs = require("fs");
console.log("۱. شروع خواندن فایل...");
fs.readFile("file.txt", "utf8", (err, data) => {
if (err) throw err;
console.log("۲. محتوای فایل:", data);
});
console.log("۳. پایان پردازش");
⚡ 📌 خروجی (بدون توقف، بقیه کدها اجرا میشن):
۱. شروع خواندن فایل... ۳. پایان پردازش (بعد از چند میلیثانیه...) ۲. محتوای فایل: محتوای داخل فایل✅ مزیت: برنامه متوقف نمیشه! درخواست فایل ارسال میشه و در همین حین، بقیهی کدها اجرا میشن. بعد که فایل آماده شد، محتوای اون نمایش داده میشه. 🔹 چرا این موضوع مهمه؟ ✔ سرعت برنامه بالا میره چون کارها همزمان انجام میشن. ✔ سرور بهتر جواب میده چون میتونه همزمان به چندین درخواست پاسخ بده. ✔ برنامه قفل نمیشه و برای کاربران کند نمیشه. 📌 توی Node.js بیشتر کارهای مرتبط با فایل، دیتابیس، درخواستهای اینترنتی و تایمرها به صورت Non-Blocking انجام میشن. پس اگه یه جا دیدی کد دیر اجرا شد، ببین از روش همگام (Sync) استفاده کردی یا نه! #NodeJS #Async #NonBlocking #Backend @Hna_nodejs
260
Event Loop در Node.js :
Node.js یک محیط اجرایی تک نخی (single-threaded) هستش حالا این یعنی چی؟؟ وقتی میگیم نود جی اس single-thread هست یعنی اینکه همه کد های جاوا اسکریپتی رو روی یک thread یا نخ اصلی اجرا میکنه و این ویژگی باعث میشه که کد هارو خط به خط اجرا کنه مشکلی که اینجا پیش میاد اینه که ممکنه یه خط کد سنگین چندین ثانیه طول بکشه و node.js کل اون زمان رو منتظر اجرای اون خط کد میشه و بعد خط های بعدی رو اجرا میکنه اینجاست که Event Loop وارد عمل میشه و وقتی یک عملیات مثل خواندن فایل، درخواست به دیتابیس یا تایمر (setTimeout) اجرا میکنی، Node.js به جای اینکه منتظر نتیجه بمونه، اون رو به سیستم (libuv) میسپره و ادامهی کد رو اجرا میکنه. بعد که نتیجه آماده شد، Event Loop اون رو پردازش میکنه و تابع مربوطه رو اجرا میکنه.
حالا سوالی که پیش میاد اینه که اگه Event Loop نبود کد ها چطور اجرا میشدن؟
Node.js بدون Event Loop باید هر درخواست رو اجرا میکرد و بعد به سراغ بعدی میرفت. یعنی اگه یک عملیات زمان بر وجود داشت برنامه متوقف میشد و تا وقتی که اون عملیات تموم نشه هیچ کدی اجرا نمیشد.
مثال: اجرای کدها بدون Event Loop (مدل سنتی تکنخی).
console.log("1 شروع پردازش");
// شبیهسازی یک عملیات سنگین که 3 ثانیه طول میکشه
function سنگین() {
const start = Date.now();
while (Date.now() - start < 3000) {} // پردازش سنگین که ۳ ثانیه طول میکشه
console.log("2 عملیات سنگین انجام شد!");
}
سنگین();
console.log("3 ادامه پردازش...");
✅ خروجی (بدون Event Loop):
1 شروع پردازش (منتظر میمونه... ⏳) 2 عملیات سنگین انجام شد! 3 ادامه پردازش... این یعنی تا وقتی که عملیات سنگین() تموم نشه، کل برنامه قفل میشه و هیچ چیز دیگهای اجرا نمیشه! حالا بیایم همین مثال رو با Event Loop و Asynchronous اجرا کنیم!
console.log("1 شروع پردازش");
setTimeout(() => {
console.log("2 عملیات سنگین انجام شد!");
}, 3000);
console.log("3 ادامه پردازش...");
✅ خروجی (با Event Loop و Async):
1 شروع پردازش 3 ادامه پردازش... (بعد از 3 ثانیه 👇) 2 عملیات سنگین انجام شد!پس یعنی نود جیاس چندنخی نیست؟ خود Node.js تکنخی هست، اما میتونه از چندین نخ در پسزمینه (Background Threads) برای پردازش I/O استفاده کنه. این کار رو با کمک کتابخانهی libuv انجام میده. Event Loop کمک میکنه که Node.js در عین تکنخی بودن، عملکردی شبیه به چندنخی داشته باشه! 😎💪🏻 @Hna_nodejs
260
https://github.com/M-SADEGH86/S3Module_For_NestJs
Features : has 4 method (uploadOne ,uploadAll,deleteOne,deleteAll)
Resize and compress images
260
سرویس AWS S3 چیست ؟
یک سرویس ذخیره سازی ابری مقیاس پذیر و ایمن است که برای ذخیره و بازیابی هر حجم داده ای طراحی شده. داده ها در قالب « شیء » Object در (Buckets) سازماندهی میشوند و از طریق API یا کنسول AWS قابل دسترسی اند. S3 با دوام و دسترسی بالا برای میزبانی وب سایت ها، پشتیبانگیری، تحلیل دادهها و ذخیره سازی فایلها ایدئال است. امنیت پیشرفته، رمزگذاری دادهها، مدیریت دسترسی و قیمت گذاری پرداخت به ازای مصرف از ویژگیهای کلیدی آن محسوب میشوند.
#aws_s3
@MsDev18
