برای دسترسی به هر صفحه وب باید یک وب سرور داشته باشید. یک سرور قادر است تا درخواست های HTTP را دریافت کرده و با کمک کد ها شما، پاسخ را به کاربر ارسال کند.

به عنوان مثال در زبان asp.net وب سرور IIS مورد استفاده قرار می گیرد و برای اجرای کد های جاوا یا PHP وب سرورهایی مانند apache وجود دارد.

نود.جی اس به شما این امکان را می دهد تا وب سرور خودتان را با چند خط کد ساده ایجاد کنید و درخواست های HTTP را به صورت ناهمگام (asynchronous) پاسخ دهید.

شما می توانید از وب سرورهای IIS و آپاچی نیز برای اجرای کدهای Node.js استفاده کنید گرچه این کار پیشنهاد نمی شود.

ساخت یک وب سرور با استفاده از Node.js

نود.جی اس به سادگی قادر است تا یک وب سرور را برای مدیریت درخواست های ورودی راه اندازی کند.

مثال زیر نشان می‌دهد که شما چگونه می توانید یک وب سرور را در فایلی به نام server.js به کمک Node.js بسازید و اجرا کنید:

var http = require('http'); // 1 - Import Node.js core module

var server = http.createServer(function (req, res) {   // 2 - creating server

    //handle incomming requests here..

});

server.listen(5000); //3 - listen for any incoming requests

console.log('Node.js web server at port 5000 is running..')

فصل ۱۰ – مثال ۱ (فایل server.js)

در مثال بالا ما ماژول http را به کمک فانکشن require() در فایل ایمپورت کرده ایم.

ماژول http یک ماژول هسته ای برای Node.js است پس نیازی نیست که آن را به کمک این NPM نصب کنید.

قدم بعدی این است که متود createServer() تعبیه شده درون http را با پارامتر های req و res صدا بزنیم، این دو متغیر حاوی اطلاعات درخواست (request) و پاسخ (response) خواهند بود. مقدار بازگردانده شده را به متغیر server انتساب خواهیم داد، زیرا همچنان با این سرور ایجاد شده کار داریم.

در نهایت ما باید متود listen() از متعلقات متود createServer() را صدا بزنیم. این کار با کد server.lister(port) انجام می شود. port در اینجا عدد پورتی که به اپلیکیشن می خواهید اختصاص دهید خواهد بود.

پورت اصلی سرور ها ۸۰ است و نیاز به تایپ کردن ندارد، اگر پورت چیزی غیر از ۸۰ باشد باید با دو نقطه پس از آدرس در مرورگر وارد شود. مثلا localhost:8080 باید وارد شود ولی localhost:80 را می شود به صورت localhost استفاده کرد.

کد server.listen(5000) به نود.جی اس می گوید که به پورت ۵۰۰۰ سرور توجه کند. مثلا هر درخواستی که به آدرس localhost:5000 ارسال شد را دریافت کند.

در مثال بالا ما همچنان به سیستم نگفته ایم که در صورتی که درخواست را دریافت کرد چه پاسخی به آن بدهد.

برای اجرای کد های بالا فقط کافی است در محیط ترمینال یا CMD کد node server.js را تایپ کنید.

پس از اجرای کد پاسخ Node.js web server at port 5000 is running.. از سیستم دریافت خواهد شد.

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

مدیریت درخواست های HTTP در Node.js

در متود http.createServer() دو پارامتر response و request تعبیه شده است که برای مدیریت پاسخ های HTTP مورد استفاده قرار می گیرند.

آبجکت request حاوی اطلاعاتی در مورد درخواست ارسال شده به سرور است. اطلاعاتی مانند آدرس درخواستی، header های ارسالی با درخواست و data در این آبجکت وجود دارد.

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

مثال زیر نشان می‌دهد که شما چگونه می توانید یک درخواست HTTP را با کمک Node.js مدیریت کنید:

var http = require('http'); // Import Node.js core module

var server = http.createServer(function (req, res) {   //create web server
    if (req.url == '/') { //check the URL of the current request
        
        // set response header
        res.writeHead(200, { 'Content-Type': 'text/html' }); 
        
        // set response content    
        res.write('This is home Page.');
        res.end();
    
    }
    else if (req.url == "/student") {
        
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('This is student Page.');
        res.end();
    
    }
    else if (req.url == "/admin") {
        
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('This is admin Page.');
        res.end();
    
    }
    else
        res.end('Invalid Request!');

});

server.listen(5000); //6 - listen for any incoming requests

console.log('Node.js web server at port 5000 is running..')

فصل ۱۰ – مثال ۲ (فایل server.js)

در مثال بالا req.url استفاده شده است تا اپلیکیشن آدرس درخواستی کاربر را تشخیص دهد.

برای ارسال پاسخ متناسب با درخواست کاربر ابتدا ما باید Header مناسب را با متود writeHead() به پاسخ اضافه کنیم و سپس با استفاده از متود write() متنی را بر روی صفحه چاپ کنیم.

در نهایت در هنگامی که Node.js با متود end() برخورد می کند اطلاعات را نشان خواهد داد.

پس از اجرای کد پاسخ Node.js web server at port 5000 is running.. از سیستم دریافت خواهد شد.

اکنون می توانید در مرورگر خود آدرس http://localhost:5000 را باز کرده و متن This is home page را مشاهده کنید

اگر شما آدرس http://localhost:5000/student را در مروگر باز کنید نتیجه زیر را مشاهده خواهید کرد:

در حال حاضر هر درخواست دیگری به سرور نتیجه ” Invalid Request” خواهد داشت.

ارسال پاسخ JSON به درخواست های HTTP در Node.js

مثال زیر نشان می دهد چگونه می توانید پاسخ JSON به درخواست های HTTP ارسال کنید:

var http = require('http'); 

var server = http.createServer(function (req, res) {   
   
    if (req.url == '/data') { //check the URL of the current request
            res.writeHead(200, { 'Content-Type': 'application/json' });
            res.write(JSON.stringify({ message: "Hello World"}));  
            res.end();  
    }
});

server.listen(5000);

console.log('Node.js web server at port 5000 is running..')

فصل ۱۰ – مثال ۳ (فایل server.js)

اگر بعد از اجرای مثال بالا، آدرس http://localhost:5000/data را در مرورگر باز کنید، با جمله Hello World در قالب JSON مواجه خواهید شد.