Node Master – Telegram
Node Master
1.03K subscribers
24 photos
2 files
156 links
Group Chat: @nodemastergp
Admin: @napoleon_n1
Download Telegram
درود و وقت بخیر دوستان.
یکی از نکاتی که خیلی میتونه بهتون کمک کنه به عنوان Backend developer دانش شبکه هست.
متاسفانه اکثر دوره های شبکه برای بچه های Developer ممکنه یکم درکشون سخت باشه چون از زاویه Network engineering بهشون نگاه میشه و نه development.

در نهایت دوره های شبکه رو هم حداقل پایه ای رو باید گذروند اما چند روز پیش این دوره کوتاه ( ۲ ساعته ) رو دیدم و به نظرم مفاهیم شبکه رو در حد خوبی با زبانی که برای developer ها ساده باشه و پایه خوبی باشه برای دوره هایی مثل Network+ میتونید ببینید.

https://downloadly.ir/elearning/video-tutorials/introduction-to-computer-networking-2-hour-crash-course/

البته نسخه که داخل یودمی هست یکم آپدیت شده و ابن نسخه دانلودلی ناقص تر هست ولی همین رو هم ببینید خوبه.

امیدوارم موفق باشید
👍19
چند روزی هست که #Deno نسخه 1.46 منتشر شده.
از نکات جالبی که اضافه شده
deno serve --parallel

این flag یکجورایی شبیه به cluster در #NodeJS عمل میکنه. البته اگر درموردش مطالعه کنید تفاوت هایی هست.
- آپدیت بعدی مربوط به deno fmt هست که فرمت های مختلف مثل html css ,scss, yml و ... رو هم انجام میده.
- یکی از تغیرات مهم دیگ پایدار شدن std مربوط به #Deno هست. نکته جالب در این مورد این هست که این std ها رو شما میتونید روی پروژه های #NodeJS خودتون هم استفاده کنید.

و از همه مهتر Deno 2 خیلی نزدیک هست و این آپدیت یعنی نسخه 1.46 آخرین آپدیت نسخه 1.X میباشد.
https://deno.com/blog/v1.46
👍3
چندین بار سعی کردم با معماری #Microservice دقیق تر آشنا بشم ولی همیشه به دلیل پیچیده بودن pattern ها لینک کردن بین مطالب زیاد موفق نبود و البته یکی از منابع خوبی که برای عمیق شدن وجود داره کتاب Building Microservices Book by Sam Newman هست.
امروز این دوره 2 ساعته رو نگاه کردم. به صورت خیلی Big picture درمورد #Microservice صحبت میکنه و البته بعضی مفاهیم هم با code snippet های خیلی ساده #NodeJS و #Express توضیح میده. پیشنهاد میکنم اگر قصد دارید #Microservice عمیق تر بشید و اگر مثل من زیاد در این مورد نمیدونید اول این دوره رو نگاه کنید و بعد مفاهیم و نکات این دوره رو هرکدوم به عنوان یک سرفصل یا سرتیتر برای مطالعه بیشتر و عمیق تر شدن استفاده کنید. به نظرم مقدمه خوبی هست قبل از مطالعه کتابی که بالاتر گفتم.

https://downloadly.ir/elearning/video-tutorials/node-js-microservices-the-big-picture/

#course
👍16
یکی از نکات زیبا که درمورد #Deno و #JSR که وجود داره این هست که شما میتونید از پکیج های std دینو در #NodeJS استفاده کنید. همشون نه ولی به اکثرشون دسترسی دارید. به لینک زیر یک نگاهی بندازید و مشخصا میبینید که کدوم پکیج ها رو میتونید در پروژه #NodeJS خودتون استفاده کنید.
https://jsr.io/@std
به عنوان مثال پکیج @std/msgpack به پروژه خودمون اضافه میکنیم.
npx jsr add @std/msgpack

و بعد کد زیر رو با #NodeJS اجرا کنید.
import * as msgpack from "@std/msgpack";

const data = { name: "node-master" };

const enc = msgpack.encode(data);
const dec = msgpack.decode(enc);
console.log(dec);

حالا سوال پیش میاد که اصلا چرا همچین کاری باید کنیم. باتوجه به این که #JavaScript خودش std بزرگی مثل #Python یا #Java نداره گاهی اوقات نیاز به یک سری کدهای کمکی برای پروژه خودتون دارید و پکیج هایی مثل Lodash, es-toolkit کمک بزرگی کردن. اما حالا #Deno هم با این کار به اکوسیستم کمک بزرگی کرده و یک رنج از ابزار های کمکی که ممکنه در loadash و بقیه شبیهه بهش پیدا نکنید رو شاید اینجا پیدا کنید.

به عنوان مثال اگر پروژه کوچیکی دارید که فقط یک instance از server شما وجود داره استفاده از ابزاری مثل #Redis صرفا برای Cache زیاد منطقی نیست و خب در اکثرا اوقات یک Map ساده مشکل شما رو میتونه حل کنه. اگر ویژگی TTL هم بخواید داشته باشید خودتون میتونید پیاده سازی کنید با کمک Map ولی معمولا از پکیج node-cache در این سناریو استفاده میکنن. حالا یک گزینه دیگ داریم که مربوط به #Deno std هست.
https://jsr.io/@std/cache
این پکیج جدا از مثال بالا مدل های مختلف دیگ از cache رو در اختیار شما میزاره که نگاهی بندازید و جالبه.
👍5
بلاخره بعد از سال ها نسخه 5 برای #Express منتشر شده میتونید تغییرات رو از اینجا ببینید و تستش کنید.
https://github.com/expressjs/express/releases/tag/v5.0.0
کلا این روزا اگر پروژه ای دارید به نظر من از هرچیزی جز #Express استفاده کنید به نظر من بهتره
👍13👎3
وقتی در حال توسعه با #NodeJS هستید یکی از مشکلاتی که در حال حاظر وجود داره استفاده از #TypeScript در هنگام توسعه میباشد. باتوجه به آپدیت های اخیر #NodeJS حرکت هایی جهت پشتیبانی راحت #TypeScript در #NodeJS با اضافه کردن فلگ های --experimental-transform-types و --experimental-strip-types تغییراتی داشته ولی همچنان تا Production ready بودن خیلی فاصله داره. گزینه های که میتونه بهتون در این مورد کمک کنه استفاده از ts-node و tsx هست.
در یک سال گذشته شخصا از هردو در پروژه های مختلف استفاده کردم. با توجه به آزمون و خطایی که من کردم در حال حاظر tsx خیلی خیلی بهتر از ts-node هست و کارتون رو به خوبی راه میندازه.
https://tsx.is/
👍10
یکی از کسایی که در کامینیوتی #NodeJS میتونید خیلی چیزا ازش یاد بگیرید Matteo Collina سازنده فریم ورک #Fastify و کلی ابزار Open source دیگ برای #NodeJs .
تا حالا چندین ویدیو از ایشون دیدم و خیلی نکات ریزی رو یاد گرفتم که اگر خودم بخوام به اون ها برسم رسما سال ها زمان میبره.
پیشنهاد میکنم این ویدیو رو حتما ببینید.
- نکته جالبی که در این ویدیو برای من بود عمق فریم ورک #Fastify بود که به برای ریز ترین مشکلات هم یک راه حلی وجود داره.
- من شخصا با #Jest به شدت مشکل دارم و در این ویدیو یک دلیل بسیار بسیار ترسناک و بزرگ رو اشاره میکنه که این مشکل رو به تنفر نسبت به #Jest تبدیل کرد.

https://www.youtube.com/watch?v=HyOuKN6KYqo
👍11
مدت زیادی هست که #Redis Stack منتشر شده ولی هنوز خیلی ها به Redis به چشم یک دیتابیس Key-Value ساده نگاه میکنند و از 90 درصد قابلیت هاش استفاده نمیکنند. پیشنهاد میکنم داکیومنت مربوط بهش رو حتما بخونیدتا تمام ویژگی هایی رو که داره ببینید.
دوتا از ویژگی های خوبی که Redis Stack داره به اسم Redis Search و Redis JSON هست.

- تا قبل از Redis JSON برای ذخیره کردن JSON ها در Redis، معادل Serialize شده رو به صورت Key-Value ذخیره میکردن و یا گاهی به صورت Map باهاش رفتار میکردن. حالا شما با Redis JSON میتونید مثل یک document oriented database مثل MongoDB رفتار کنید. ( البته Query ها به صورت پیش فرض محدودیت هایی دارند )
- تا قبل از Redis Search برای سرچ کردن تنها گزینه موجود استفاده از Glob Pattern ها بود که حتی داخل خود داکیومنت هم پیشنهاد کرده بودن که اگر روی Production هستید سعی کنید زیاد استفاده از Glob pattern نکنید. و این موضوع با در نظر گرفتن این نکته که Redis به صورت ذاتی Single thread هست و Event loop رو با این کار در حجم زیاد دیتا بلاک میکنید منطقی هست. البته این موضوع برای دوستان #JavaScript و #NodeJS کاملا به صورت واضح قابل درک هست. حالا شما با استفاده از Redis Search میتونید روی دیتا مورد نظرتون Index بزارید و باتوجه به اون Index و Schema که تعریف کردین Query بزنید و دیتا رو خیلی سریع و تمیز دریافت کنید. انتظار قدرت SQL و بقیه دیتابیس ها مثل MongoDB رو نداشته باشید ولی در بعضی سناریو ها واقعا ترکیب Redis Json و Redis Search میدرخشه.
در این مثال با نحوه کار کردن با Redis JSON آشنا میشیم و در پست بعدی با Redis Search یک خورده کار میکنیم.
به صورت کلی شما با استفاده از "JSON" میتونید دسترسی به namespace مربوط بهش رو داشته باشید و با json ها کار کنید.

- ایجاد یک Json doc جدید
JSON.SET key path value

با استفاده از JSON.SET میتونید JSON به راحتی ذخیره کنید. در اینجا key منظور از همون کلید عادی هست نکته خاصی نداره ( در Redis Search درموردش بیشتر صحبت میکنیم ). منظور از Path اینجا مسیر JsonPath هست که با استفاده از اون میتونید فیلتر های مختلف روی دیتا Json بزارید و بخش خاصی رو فقط بخونید یا آپدیت کنید ( معادل Xpath برای داده های XML ). برای این که بتونیم یک دیتا json ذخیره کنیم خب ما میخوایم در مسیر Root این کلید ذخیره کنیم و با استفاده از "$" مشخص میکنیم که میخوایم روی Root ذخیره کنیم.
JSON.SET user:1 $ '{"name": "Iman", "age": 25, "city": "Bushehr"}'

حالا اگر بخوام فقط بخش name رو بخونم از این به این صورت عمل میکنم.
JSON.GET user:1 "name"

یا اگر بخوام شهر رو آپدیت کنم به تهران.
JSON.SET user:1 $.city '"Tehran"'

حالا اگر بخوایم کل دیتا بخونیم و نتیجه رو ببینیم.
JSON.GET user:1

یک نکته خیلی مهم و ریز درمورد آپدیت بگم. جایی که دیتا رو قرار میدیم یعنی '"Tehran"' هر مدل دیتایی میخواد باشه مثل اینجا که یک string ساده هست. باید یک parser مربوط به JSON بتونه به صورت Valid این دیتا رو Serialize کنه. به عنوان مثال یعنی عبارت زیر در #JavaScript باید بدون هیچ خطایی کار کنه.
> JSON.stringify("Tehran")
'"Tehran"'

در صورتی که JSON.stringify به شما خروجی داد شما اون دیتا رو میتونید به عنوان value استفاده کنید.
حالا برا این که مثال رو یکم جالب تر کنیم یک Json دیگ رو داخل این Embed میکنیم.
JSON.SET user:1 $.address '{"zipCode":1234}'
JSON.GET user:1 $.address.zipCode

در پست بعدی به Redis Search نگاه میندازیم و اگر انرژی هم موند یکی از مهم ترین و اساسی ترین نکات Redis که دونستنش میتونه مثل مرگ و زندگی باشه یعنی Atomicity رو برسی میکنیم.
امیدوارم موفق باشید.
👍19
Node Master
مدت زیادی هست که #Redis Stack منتشر شده ولی هنوز خیلی ها به Redis به چشم یک دیتابیس Key-Value ساده نگاه میکنند و از 90 درصد قابلیت هاش استفاده نمیکنند. پیشنهاد میکنم داکیومنت مربوط بهش رو حتما بخونیدتا تمام ویژگی هایی رو که داره ببینید. دوتا از ویژگی های خوبی…
در پست قبلی درمورد #Redis JSON برای ذخیره کردن Document ها و Query های مربوط به این بخش آشنا شدیم. امروز نگاهی به Redis Search میندازیم و ترکیبش رو با Redis JSON برسی میکنیم.
اولین نکته این که شما توانایی index کردن HASH ها و JSON ها رو دارید. یعنی اگر پروژتون الان روی HASH هست بدون هیچ دردسری میتونید از Query های Redis Search استفاده کنید. برای پست امروز با Redis JSON کار میکنیم باتوجه به این که مطالعه کوچیکی درموردشون داشتیم. اولین کاری که میکنیم #Redis رو با دیتا فیک Seed میکنیم.
JSON.SET user:0 $ '{"name":"Farah","city":"Malibong East","age":21}'
JSON.SET user:1 $ '{"name":"Wyn","city":"Hezheng Chengguanzhen","age":62}'
JSON.SET user:2 $ '{"name":"Frederich","city":"Liujia","age":32}'
JSON.SET user:3 $ '{"name":"Maria","city":"Tudela","age":47}'
JSON.SET user:4 $ '{"name":"Marty","city":"Irtyshskiy","age":48}'
JSON.SET user:5 $ '{"name":"Glendon","city":"Bagorejo","age":59}'
JSON.SET user:6 $ '{"name":"Minne","city":"San Pedro","age":59}'
JSON.SET user:7 $ '{"name":"Garrett","city":"Shuangpu","age":26}'
JSON.SET user:8 $ '{"name":"Anna-diana","city":"Jalālpur","age":32}'
JSON.SET user:9 $ '{"name":"Silas","city":"Qacha’s Nek","age":34}'

درمورد کار کردن با JSON در پست قبلی توضیح دادیم. مرحله بعدی این هست که Index و Schema مناسب برای این دیتا ایجاد کنیم که بتونیم Query بزنیم.
FT.CREATE idx:user ON JSON PREFIX 1 user: SCHEMA $.name AS name TEXT $.age AS age NUMERIC $.city AS city TEXT

به FT.CREATE ما میتونیم ایندکس جدید ایجاد کنیم. این کامند بسیار آپشن های زیادی داره و پیشنهاد میکنم حتما داکیومنت مربوط بهش رو بخونید به عنوان مثال میتونید بعضی از Field ها که نیاز ندارید داخل Index قرار ندین ولی توی Schema شما وجود داشته باشه. برای امروز ما سعی میکنیم تا حد ممکن مثال رو ساده نگه داریم.
- بخش اول یعنی idx:user اسم ایندکس یا به قولی Schema ما هست. اگر میخواید ببینید چه Index هایی دارید میتونید از FT._LIST استفاده کنید.
- بخش دوم یعنی ON JSON تعریف میکنید که دیتا JSON هست و اینجا میتونید HASH هم بزارید.
- بخش سوم که برای Performance مهم هست این هست که محدودیت Index ایجاد میکنید که روی تمام Key ها ایجاد نشه. اینجا ما گفتیم کلید هایی که پیشوند 'user:' دارن و اگر دقت کنید در بخش Seed هم تمامی کلید ها با 'user:' شروع میشوند. توجه کنید اگر دیتا شما با این پسوند شروع نشه index نمیشه و نمیتونید سرچ انجام بدین. اگر این بخش هم نزارید کل key ها رو index میکنه یعنی '*' که ما نمیخوایم.
- بخش چهارم که Schema رو تعریف میکنیم با انواع data type ها. اول مسیر فیلد رو با #JSONPath مشخص میکنیم و بعد برای Query زدن با استفاده از AS براشون Alias میزاریم و البته در آخر نوع data type هم مشخص میکنیم.
در اینجا age از نوع عددی هست و بقیه TEXT. در اینجا هم آپشن های متنوعی وجود داره مثل استفاده از Geo میتونید مختصات جغرافیایی بزارید و Query های خاص خودش رو استفاده کنید. مثلا در app های دوست یابی میخواین نزدیک ترین افراد رو به کاربر پیدا کنید.
حالا یک سری Query رو با هم برسی میکنیم.
مثلا افرادی رو میخوایم که بالا 30 سال سن دارن و از offset 0 شروع کن 2 تا نتیجه رو برای ما بیار
FT.SEARCH idx:user '@age:[30 +inf]' LIMIT 0 2

اینجا هست که با استفاده از Alias هایی که بالا مشخص کردیم میتونیم Query بزنیم روی ایندکسی که میخوایم.
حالا اگر بخوایم ادمایی که 34 سال دارن رو ببینیم.
FT.SEARCH idx:user '@age:[34 34]'
FT.SEARCH idx:user '@age==34' DIALECT 2

این دوتا Query برابر هستن از نظر خروجی. تنها تفاوت این هست که #Redis در Query lang که داره برای حفظ Backward compatibility سینتکس های جدید که اضافه میکنه رو با DIALECT دسته بندی کرده که در دومی DIALECT مدل 2 رو میبینم.
حالا یکی رو میخوایم ببینیم که توی یک شهر خاص زندگی میکنه و میخوایم فقط اسمش رو ببینیم.
FT.SEARCH idx:user '@city:San Pedro' RETURN 1 name

حالا میخوایم تمام کاربرا رو بر اساس سن Sort شده ببینیم.
FT.SEARCH idx:user '*' SORTBY age DESC

اینجا جا داره بگم به قول خارجی های Sky is the limit کلی قابلیت دیگه وجود داره که واقعا ارزش برسی داره مثل Aggregate ها که قدرت خیلی زیادی داره یا کار کردن با Vector ها.
هدف از این پست آشنایی با این بخش بود. در آینده بخش های بیشتری رو برسی میکنیم. امیدوارم موفق باشید.
👍7
باشد تا رستگار شویم.🔥
"node".split('').sort().join('')
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
چند روزی هست #NodeJS نسخه 23 منتشر شده و بزودی 22 LTS رو میبینیم.
سعی میکنم تغییرات رو باهم برسی کنیم در آینده.
https://nodejs.org/en/blog/release/v23.0.0
👍13
سلام به همگی دوستان که جدید اومدن خیلی خیلی خوش اومدین.
قدیمی ها دمتون گرم مرسی که همیشه همراه من بودین.

لینک گروه بچه ها ما اینجا هست خوشحال میشم اگر دوست داشتید به کامینیوتی کوچیک ما جوین بشید.
https://news.1rj.ru/str/NodeMasterGP
👍9
خیلی از دوستانی که من میشناسم اکثرا به صورت self thought بودن و از رشته های دیگ وارد برنامه نویسی شدن.
بخاطر همین موضوع ممکنه یکم سردرگمی برای دوستان پیش بیاد درمورد مفاهیم پایه ای تر مربوط به Computer science و البته شما چه frontend یا backend باشید هرچقد در این مفاهیم عمیق تر باشید در بازار کار به شما Competitive advantage میده و کار پیدا کردن برای شما خیلی راحت تر میشه و این موضوع رو هم قشنگ حس میکنید.

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

خودم هم در همین مسیر هستم و دارم یاد میگیرم و از این منابع استفاده میکنم و امیدوارم براتون مفید باشه و کورس ها و نکاتی هم که اینجا میگم باتوجه به سطحی که حس میکنید دارید انتخاب کنید و ببینید.

- همیشه هروقت کسی از من درمورد مسیر Backend سوال میپرسه من تاکید خیلی زیادی روی database و database design دارم.
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-databases/
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-sql-postgresql/
و اگر سطح خوبی دارید و میخواید deep تر بشید قطعا این چنل یوتیوب یک طلا درمورد database ها هست بیشتر از زاویه آکادمیک به مسائل نگاه میکنه و خب برای باتجربه تر ها خیلی مناسب هست.
https://www.youtube.com/@CMUDatabaseGroup

- موضوع بعدی networking هست. شما چه frontend باشی یا backend باید و باید OSI Model رو به صورت قلبی درک کرده باشی و البته در حد پایه ای network رو بشناسین شاید شما بگی من فرانت هستم لازم نداره. ممکنه این موضوع مستقیم تاثیری روی کار شما نداشته باشه ولی وقتی همکار devops شما اگر ازتون سوالی پرسید میتونید باهاش همکاری کنید مثل مجسمه خشک به همکارتون نگاه نمیکنید و این خیلی نکته مثبتی هست.
https://downloadly.ir/elearning/video-tutorials/introduction-to-computer-networking-2-hour-crash-course/
این دوره خیلی کوتاه هست و برای خیلی ها کافی هست و بیشتر نیازی نیست پیش برید ولی برای همه لازم هست. بقیه بیشتر برای عمیق تر شدن و علاقه هست.
https://downloadly.ir/elearning/video-tutorials/comptia-network-n10-008-full-course-practice-exam-1/
https://www.goodreads.com/book/show/59147607-computer-networking-global-edition

این کتاب که پایین میزارم یک خورده قدیمی هست و اگر میخواید مطالعه کنید یکم دقت کنید. درکل کتاب باارزشی هست.
https://www.goodreads.com/book/show/505564.The_TCP_IP_Guide

در ادامه از این دو repo سعید کنید الهام بگیرد برای مطالعه و deep تر شدن.
https://github.com/ossu/computer-science
https://github.com/jwasham/coding-interview-university

مفاهیم دیگه ای که در آینده با هم منابع مهمشون رو برسی میکنیم مثل سیستم عامل و مفاهیم low level تر مثل Computer architecture.

یک نکته دیگ این که اگر حس میکنید من میتونم به شما کمکی کنم در هرموردی میتونید PV به من پیام بدین و من خیلی خوشحال میشم اگر بتونم کمکی کنم.

#Course #Book #Guide
👍31
دنبال یک بهانه بودم که دوتا از بزرگترین و مهم ترین کتاب های computer science رو معرفی کنم.

خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.

در این توییت به این کتاب ها با یک داستان درمورد لینوکس و شخص سازندش یعنی لینوس توروالدز اشاره میکنم نقطه مشترکشون با این کتاب ها رو میگم

https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09

#Book
👍5
به تمامی دوستان چه تازه کار و چه کسانی که سال ها تجربه دارند پیشنهاد میکنم حتما مفاهیم 12factor رو مطالعه کنند. خیلی از قدیمی تر ها این مفاهیم رو با سال ها کسب تجربه و به سختی به دست آوردن و همچین منبعی که به صورت خیلی خلاصه این ها رو به تمیز ترین شکل ممکن توضیح میده واقعا خیلی با ارزش هست.
https://12factor.net/

#Resource
👍15
Node Master
به تمامی دوستان چه تازه کار و چه کسانی که سال ها تجربه دارند پیشنهاد میکنم حتما مفاهیم 12factor رو مطالعه کنند. خیلی از قدیمی تر ها این مفاهیم رو با سال ها کسب تجربه و به سختی به دست آوردن و همچین منبعی که به صورت خیلی خلاصه این ها رو به تمیز ترین شکل ممکن…
سناریویی رو تصور کنید که یک پروژه مالی Deploy دارید و قصد دارید آپدیت جدید Production رو Deploy کنید و این سرویس هم ترافیک زیادی رو دریافت میکنه.
اتفاقی که میافته این هست که Process قدیمی Kill میشه و یک Process با آپدیت جدید باز میشود که خیلی ساده هست.
حالا موضوعی که باید توجه ویژه بشه این هست که این سرویس ترافیک زیادی داره و Kill کردن Process به صورت یهویی ممکنه در روند Transaction های موجود اختلال ایجاد کنه که به هیچ عنوان قابل قبول نیست.
در بهترین حالت برای حل این چالش باید راهی داشته باشیم که تمام Transaction های جاری نهایی بشن ولی هیچ Request جدید از سمت کلاینت ها دریافت نشه. حالا برای پیاده سازی این موضوع باید چیکار کنیم؟
راه حل خیلی ساده هست.
در این حالت به عنوان مثال با فرض این که application ما از طرف kubernetes سیگنال SIGTERM دریافت میکنه کافیه که server.close رو استفاده کنیم و در callback مربوط بهش از Process خارج بشیم.
وقتی server.close اجرا میشه سرور دیگه ریکوست جدید دریافت نمیکنه و سعی میکنه response برای request های درحال پردازش ارسال کنه و در نهایت بعد از به پایان رسیدن تمامی request ها وارد callback میشه.
import http from "node:http";
import process from "node:process";

const server = http.createServer((_, res) => res.end("NodeMaster"));

process.on("SIGTERM", () => {
server.close((err) => {
if (err) process.exit(1);
process.exit(0);
});
});

server.listen(3000);

کلا این مفهوم Graceful shutdown رو باید همیشه در Apllication هایی که توسعه میدین رو در نظر بگیرید و این موضوع رو داخل 12factor هم میبینید که بهش اشاره شده.
گاهی اوقات توجه نکردن به Graceful shutdown میتونه با توجه به داشتن Side effect خیلی ترسناک بشه مثل کار کردن با در پروژه های realtime که میتونه باعث data lost بشه.
👍21
Node Master
console.log("Welcome To Node Master")
با سلام خدمت همگی دوستان.
من فکر میکردم امروز یک ساله میشه چنل ولی ظاهرا ۳ روز پیش بوده.😂

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

واقعا همیشه دوست داشتم یک کامینیوتی برنامه نویسی عضو باشم که بچه ها فعال باشن و بحث ها عمیق داشته باشیم که با کمک شما تونستم به این آرزو در این یک سال برسم و واقعا از شما خیلی خیلی ممنونم🔥

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

در ادامه باهم دیگه قوی تر جلو میریم چیز های جدید و عمیق تر یاد میگیرم و بابت این موضوع خیلی خیلی هیجان دارم و خوشحال.

برای همه شما آرزو موفقیت و خوشبختی دارم.

داداش کوچک شما ایمان ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
یک پکیج خیلی کوچیک و کاربردی که میتونید در پروژه های خودتون و حتی Github action استفاده کنید تا اگر مشکل امنیتی در ورژن مورد استفاده شما در #NodeJS وجود داره با خبر بشید و در صورت نیاز آپدیت کنید
فقط کافی هست که با npx این پکیج رو ران کنید.
npx is-my-node-vulnerable

https://www.npmjs.com/package/is-my-node-vulnerable
👍12