اگر برگرديم به خيلي وقت پيش، زماني كه صفحات وب صرفا HTML بودن، يه مشكل داشتيم كه همه صفحاتمون ايستا بودن يعني صرفا اطلاعات رو نشون ميدادن. درگذر زمان و با امدن زبونايي مثل جاوا اسكريپت حالا مرورگر ها وظيفه داشتن علاوه بر گرفتن و نشون دادن HTML، جاوا اسكريپت هم بگيرن و براي كاربر خروجي توليد كنن كه نياز به يك موتور براي اين كار داشتيم حالا اگر بيايم توي زمان حال و مرورگر كروم رو درنظر بگيريم اسم اون موتور ميشه V8 .پس همنطوري كه گفتم جاوا اسكريپت صرفا توي مرورگر اجرا ميشد، حالا چي شد كه NodeJs امد وسط؟!

براي اجرا شدن جاوا اسكريپت خارج از مرورگر Ryan Dahl مياد موتور V8 كروم رو بر ميداره و با cpp (بخوانيد: سي پلاس پلاس)اين مشكل رو حل ميكنه.

NodeJs محيط اجرا اي (runtime environment) هست براي javascript در خارج از مرورگر ها

اما چرا با سي cpp نوشته شده؟

قبل از هر چيز خود V8، كروم و نود جي اس همگي تماما (براي كروم اكثرا) با cpp نوشته شده دليلشم اينه كه جاو اسكريپت نميتونه يك سري كارهارو انجام بده اما cpp توي انجام دادنشون عاليه.

مثلا فرض كنيد ميخوايم از متد معروف javascript توي مرورگر استفاده كنيم:

document.querySelector

خوب حالا اگر اين متد رو سرچ كنيد متوجه ميشيد كه قسمتي از جاوا اسكريپت نيست بلكه توسط V8 پياده سازي شده كه اجازه ميده JS (بخوانييد javascript )با DOM در ارتباط باشه و همينطور براي NodeJs. براي مثال JS نميتونه با فايل ها سروكله بزنه اما NodeJs مكملش ميشه و اين قابليتو بهش ميده كه اين قابليت منجر ميشه تا ما بتونيم براي سرورمون يك backend (بخوانيد: بك-اند)با JS بنويسيم.

يادمونم باشه كه متدهاي NodeJs فقط توي خودش كار ميكنن و نه توي Console مرورگر ها و همينطور برعكس.

NodeJs زبان برنامه نويسي يا فريم ورك نيست بلكه يك محيط اجرايي براي جاوا اسكريپت هست و ما توسعه دهنده جاوا اسكريپت هستيم :>