در دنیای اینترنت وب سرورها جایگاه ویژه ای دارند؛ چرا که وظیفه آن ها ارسال اطلاعات برای کلاینت ها است. به همین دلیل هرکسی که در حوزه برنامه نویسی وب فعالیت می کند، باید روش ساخت آن ها را بیاموزد. یکی از ساده ترین راه های موجود ساخت وب سرور با Node.Js است. پلتفرمی متن باز که قابلیت اجرا بر روی انواع سیستم عامل ها را دارد و کدنویسی آن نیز بسیار ساده است. در ادامه این مقاله از آی وحید قصد داریم صفر تا صد ساختن یک وب سرور با استفاده از Node.Js را به شما آموزش دهیم. با ما همراه باشید.

آن چه در این مطلب می آموزیم:

  • نصب ابزارهای لازم
  • آماده سازی فضای ذخیره سازی
  • شروع کد نویسی؛ ساخت سرور
  • پاسخ به درخواست های رسیده
  • پیدا کردن فایل های مورد نیاز در مسیرهای مختلف

قدم اول : نصب ابزارهای لازم

اولین قدم برای شروع برنامه نویسی وب سرور این است که ابزارهای لازم برای آن را بر روی سیستم خود نصب کنید. برای این کار به Node.Js ،NPM و VS Code نیاز دارید. مراحل نصب هریک از این پلتفرم ها را در ادامه بیان خواهیم کرد.

نصب Node.Js

ابتدا وارد سایت nodejs.org شوید و نسخه نصبی آن را متناسب با نوع سیستم خود دانلود کنید.

نکته: هنگام ورود به این سایت دو نسخه Current Version و Long Time Support (LTS) را می بینید. توصیه ما استفاده از نسخه LTS است؛ چرا که کاملا تست شده و ویژگی های آن تا مدتی طولانی حفظ می شوند و البته که تعداد باگ های کمتری هم دارد.

برای استفاده از کدهای آماده یا به اصطلاح پکیج هایی که دیگران نوشته اند نیاز به استفاده از Node Package Manager (NPM) دارید. همزمان با نصب برنامه اصلی این ابزار نیز نصب خواهد شد.

پکیج های مورد نیاز شما همگی در سایت www.npmjs.com در دسترس هستند؛ پس قبل از اینکه دست به کیبورد شوید بهتر است سری به این سایت بزنید. شاید کسی قبلا زحمت شما را کشیده باشد.

مراحل نصب Node.Js نکته خاصی ندارد و تنها کافی است بر روی دکمه next کلیک کنید تا همه ابزارهای لازم بر روی سیستم شما قرار بگیرند.

نصب Visual Studio Code (VS)

برای ساخت وب سرور با Node.Js باید از یک ویرایشگر برای کد زنی استفاده کنید. VS یکی از بهترین ویرایشگرها است که به صورت رایگان و کاملا متن باز در دسترس شما است. شما می توانید در محیط ویندوز، مک و لینوکس آن را نصب کنید و از امکانات پیشرفته آن بهره ببرید. برای این کار وارد سایت code.visualstudio.com شوید و بعد از دانلود نسخه مناسب آن را بر روی سیستمتان نصب کنید.

اگر اکنون در حال استفاده از ویرایشگر دیگری هستید، نیازی نیست آن را تغییر دهید و می توانید از هر گزینه ای که برایتان راحت تر است بهره ببرید.

قدم دوم : آماده سازی فضای ذخیره سازی

بعد از نصب ابزارهای لازم، نوبت به در نظر گرفتن محلی برای ذخیره فایل های وب سرور می رسد. در این مرحله در مسیر مورد نظر خود پوشه ای با نام Mywebserver یا هر نام دیگری که دوست دارید بسازید و سپس مراحل زیر را دنبال کنید.

1- خط فرمان سیستم عامل را باز کنید و وارد مسیری که در آن پوشه مربوط به وب سرور را ساخته اید شوید. به عنوان مثال اگر پوشه را در درایو D ذخیره کرده اید، دستور زیر را بزنید.

D:\Mywebserver >

2- اکنون باید فایل package.json را بسازید و آن را به پروژه اضافه کنید؛ این فایل یکی از موارد ضروری برای ساخت وب سرور با Node.Js است که اطلاعات مهمی را در رابطه با پروژه درون خود جای می دهد. مواردی مانند نام پروژه، برنامه نویس، آدرس گیت هاب، وابستگی ها، ویرایش وب سرور و … همگی در آن ذخیره می شوند.

3- قدم بعدی برای ساختن یک وب سرور با استفاده از نود جی اس، استفاده از NMP برای ساخت فایل Package است. برای این کار تنها کافی است دستور npm init را وارد کنید و به سوالاتی که از شما پرسیده می شود پاسخ دهید. در صورتی که پاسخی ندارید، اجازه دهید که مقدار پیش فرض باقی بماند.

نکته: اگر فعلا قصد تغییر اطلاعات پیش فرض را ندارید، دستور npm init –y را بزنید تا فایل با پاسخ های از پیش تعیین شده ایجاد شود.

4- در این مرحله باید برنامه VS Code یا هر ویرایشگر دیگری که از آن برای کدنویسی استفاده می کنید را به اجرا درآورید. برای VS Code می توانید دستور .Code را در خط فرمان بزنید یا خود برنامه را به صورت مستقیم اجرا کنید.

5- بعد از اجرای نرم افزار ویرایشگر، در پوشه Mywebserver فایل جدیدی به نام app.js بسازید و کد نویسی را شروع کنید.

قدم سوم : شروع کد نویسی؛ ساخت سرور

مراحل قبلی همگی آماده سازی اولیه برای ساخت وب سرور با Node.Js بودند؛ اکنون زمان آن رسیده است که آستین ها را بالا بزنید و دست به کیبورد شوید. کد نویسی وب سرور را طبق مراحل زیر انجام دهید.

ایجاد یک سرور و پورتی که روی آن مشغول شنیدن باشد

نود جی اس خود دارای ماژول های آماده ای است که می توانید از طریق آن ها سرور ایجاد کنید. در این مرحله می توانید ماژول HTTP را استفاده کنید که روی پورت خاصی درخواست ها را می گیرد و آن ها را برای قسمت های دیگر ارسال می کند. برای استفاده از این ماژول قطعه کد زیر را بنویسید.

Const http = require(‘http’);

تابع Require با یک آرگومان ورودی ماژول مورد نظر شما را لود می کند و آن را در دسترس شما قرار می دهد. اکنون می توانید از طریق متغیر ثابت HTTP به این ماژول دسترسی داشته باشید.

بعد از ساخت سرور باید پورتی که روی آن گوش می کند را نیز تعیین کنید. برای این کار پارامتر ثابتی تعریف می کنید و به آن یک عدد نسبت می دهید. به عنوان مثال در قطعه کد زیر ما پورت 5000 را برای شنیدن انتخاب کرده ایم.

Const port = 5000;

ساخت وب سرور با استفاده از ماژول HTTP

اکنون باید با استفاده از متد CreateServer سرور اصلی را بسازید. ورودی این متد یک تابع است که در زمان دریافت درخواست تولید Event می کند. در اینجا رخداد ما رسیدن درخواست است که پاسخ آن با توجه به نوع درخواست تولید شده و به صورت Callback به متد برمی گردد. قطعه کد زیر توضیحات بالا را نشان می دهد :

Const server = http.createServer (function(request, result) {
………..
});

دو پارامتر Request و Result به عنوان آرگومان های ورودی به تابع Function پاس می شوند که اولی نشان دهنده اطلاعات درخواست است و در دومی نتیجه آن قرار داده می شود.

تنظیم پورت برای شنیدن

در مرحله قبلی شی سرور را ساختید و اکنون نوبت به آن رسیده است که گوش شنوای آن را فعال کنید. برای این کار از متد Listen استفاده می کنید؛ توجه داشته باشید که این متد باید روی شی سرور فراخوانی شود. در مراحل قبلی ساخت وب سرور با Node.Js ، پورت را 5000 تعیین کردیم و اکنون باید همین درگاه را برای شنیدن به سرور معرفی کنیم.

Server.listen (port, function (error) {
Consol.log (error);
If (error) {
Throw new Error (error.message);
}
Else {
Consol.log (‘listening on port’ + port);
}
})

همان طور که از قطعه کد بالا مشخص است، متد Listen دارای دو آرگومان ورودی است که اولی شماره پورتی است که عمل گوش دادن روی آن انجام می شود. آرگومان دوم تابعی است که شی Error را به عنوان ورودی دریافت می کند. همان طور که احتمالا حدس زده اید، این تابع Callback زمان وقوع خطا فعال می شود و پیغام خطا را ارسال می کند. در غیر این صورت مقدار آن undefined است و شرط if اجرا نمی شود.

در هر مرحله از ساخت وب سرور با Node.Js می توانید کد خود را با استفاده از نوشتن دستور Node app.js در خط فرمان اجرا کنید. بعد از دیدن نتیجه و برطرف کردن خطاها تا این قسمت Ctrl + C را بزنید و به ادامه کد نویسی بپردازید.

قدم چهارم : پاسخ به درخواست های رسیده

طبیعتا سرور تنها برای دریافت درخواست ها ایجاد نشده و باید بتواند پاسخ مناسبی برای هر کلاینت ارسال کند. در این مرحله لازم است از پارامتر Response برای ارسال پاسخ استفاده کنید. به عنوان مثال در قطعه کد زیر سرور ما برای همه درخواست های ورودی پاسخ hello world را ارسال می کند.

Const server = http.createServer (function(requesr, response) {
Reponse.write (‘Hello World’);
Response.end ();
});

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

برای امتحان این قسمت از برنامه بعد از اجرای سرور با استفاده از دستور node app.js ، مرورگر را باز کنید و بر روی localhost:5000 بروید تا پیغام Hello World را ببینید.

طبیعتا یک وب سرور قرار نیست جواب سلام درخواست های کلاینت ها را بدهد و باید یکی از صفحات HTML را که در اختیار دارد برای آن ها ارسال کند. یک فایل HTML دلخواه ایجاد کنید و آن را در پوشه Mywebserver قرار دهید.
ورودی متد Write یک رشته است؛ پس شما باید به سرور بفهمانید که صفحه HTML را به صورتی برای مرورگر ارسال کند که آن را به درستی نمایش دهد. به این منظور از قطعه کد زیر استفاده می کنید که داده هایی را به هدر پاسخ اضافه می کند.

Response.writeHead (200, { ‘Cintent-type’ : ‘text/html’});

ورودی اول تابع WriteHead یک عدد است؛ این عدد در واقع کدی است که نشان می دهد نتیجه درخواست به چه صورتی بوده و چه پاسخی از سرور دریافت شده است. فرستادن عدد 200 به این معنا است که درخواست و پاسخ درست انجام شده و صفحه مورد نظر به زودی توسط سرور بارگیری خواهد شد.

پارامتر دوم نیز نشان دهنده رشته هایی است که باید به Header پاسخ افزوده شوند تا مرورگر صفحه را به درستی نمایش دهد. قطعه کد نوشته شده در بالا نشان می دهد که هدر Content-Type به مقدار TEXT/HTML اضافه شده است. این بدان معنا است که پاسخی از نوع HTML ارسال خواهد شد.

اکنون نوبت به آن رسیده است که ساخت وب سرور با Node.Js را با استفاده از فراخوانی صفحه HTML تکمیل کنید. برای این منظور لازم است که از ماژول آماده File System استفاده کنید. این ماژول به شما کمک می کند که بر روی فایل ها و پوشه ها کار کنید و به آن ها دسترسی داشته باشید. برای استفاده از این ماژول متغیر ثابت fs را می سازیم.

Const fs = require (‘fs’);

اکنون می توانید از متد Read File همین شی برای دسترسی به محتویات فایل HTML استفاده کنید. ورودی اول این متد همان فایل مورد نظر است و ورودی دوم نیز خطایی است که در زمان خواندن ممکن است پیش بیاید. باز کردن فایل به همراه نمایش پیغام خطای مناسب را به صورت زیر می نویسید.

Fs.readFile (‘index.html’ , function (err , data) {
If (err) {
Response.writeHead (404);
Response.write (‘Error: File not found’);
}
Else {
Res.write (data);
}
Res.end();
})

قدم پنجم : پیدا کردن فایل های مورد نیاز در مسیرهای مختلف

مهم ترین نکته در ساخت وب سرور با NodeJs همین مرحله است؛ در یک سرور همه فایل ها در یک قسمت ذخیره نشده اند و برای اینکه به کلاینت پاسخ مناسبی بدهد، لازم است که به مسیرهای مختلفی سر بزند. برای این کار لازم است که سرور آدرس URL را به طور دقیقی بررسی کند و با توجه به مسیر تعیین شده فایل مناسب را برای کلاینت بفرستد.

دسترسی به قسمت ها مختلف سایت از طریق اجرای شرط های if امکان پذیر است. به عنوان مثال در قطعه کدهای بالا برای دسترسی به hello world که تنها در مسیر localhost:5000/ قرار داده شده، کد را به شکل زیر تغییر می دهیم.

Const server = http.createServer (function (request, response) {
If (request.url === ‘/’) {
…………..
}
{);

برای دسترسی به شاخه های زیرین می توانید از ifهای تو در تو استفاده کنید یا شرط ها را به گونه ای هوشمندانه تر بگذارید تا سرور دقیقا به همان چیزی که کلاینت در نظر داشته است برسد.

سخن پایانی

ساخت وب سرور با Node.Js اصلا کار سخت و پیچیده ای نیست و تنها با چند خط کد ساده می توانید این کار را انجام دهید. توجه داشته باشید که HTTPS سروری نیست که برای پروژه های بزرگ استفاده شود؛ چرا که مسیردهی های آن پیچیده است و در زمان بزرگ تر شدن وب سایت کار را بسیار سخت می کند. روش های ساده تری مانند فریم ورک Express برای سرور سازی وجود دارد که پیدا کردن URL ها و ارائه خطاها را بسیار راحت تر می کنند.