درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من
صندوق پیام
همه را دیدم تنظیمات
  • در حال دریافت لیست پیام ها
صندوق پیام
  • در حال دریافت لیست رویدادها
همه رویدادهای من

آموزش node js قسمت دوم

14 نظرات
به نام خدا

در قسمت اول آموزش Node js با مفهوم ، نصب و یک مثال ساده آشنا شدیم

همونطور که تو قسمت اول گفتیم node js تفاوتی که با سایر زبان های تحت سرور داره اینکه اونها حتما نیاز به یک سرویس http دارن که در اون سرویس اجرا بشن
برای مثال زبان php با استفاده از برنامه apache , زبان asp.net با IIS ولی در node js ما خودمون سرور http رو ایجاد می کنیم


حال قسمت دوم آموزش رو با یک مثال کاربردی شروع می کنیم :

var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);

کد بالا رو در فایلی به نام server.js ذخیره کنید و اجرا بکنید
نحوه ی اجرا تو اون پوشه ای که فایل server.js هست cmd رو باز بکنید و دستور زیر رو وارد بکنید
node server.js
سپس مرورگر رو باز بکنید و آدرس زیر رو وارد بکنید :

127.0.0.1:8888

مشاهده خواهید کرد که عبارت Hello World در صفحه چاپ شد.

تجزیه و تحلیل کد بالا


کد :
var http = require("http");
ماژول http رو وارد کد میکنه که ما از اون برای ایجاد سرور استفاده می کنیم
سپس با کد :
var server = http.createServer();
server.listen(8888);
ابتدا یک سرور http می سازیم سپس در خط دوم مشخص می کنیم که این سرور به کدوم پورت گوش بده
شما اگه سه خط کد بالا رو بجای اون کد اولی جایگزین کنین باز هم سرور http ایجاد میشه و در مرور گر آدرس و پورت رو وارد بکنین هیچ اتفاقی نمی افته چون سرور ایجاد شده ولی برای درخواست و پاسخ های http یعنی request و response هیچ کدی نوشته نشده

تجزیه تحلیل رو همینجا نگه میداریم
یک مثالی از اینکه چطور برای پارامتر ورودی تابع از تابع استفاده کنیم ، میاریم سپس بر میگردیم به ادامه تجزیه و تحلیل کد اولی و اینکه چطور به درخواست های http پاسخ بدیم



به این مثال توجه بکنید :
function say(word) {
console.log(word);
}
function execute(someFunction, value) {
someFunction(value);
}
execute(say, "Hello");

در کد بالا say یک تابع هست که یک پارامتر ورودی دارد و هنگام اجرا آن را چاپ می کند
ولی در تابع دوم پارامتر اول ورودی خود یک تابع هست که مقدارش هرچی باشه اون اون رو به عنوان تابع در نظر می گیره و اجرا می کنه

حالا کد بالا رو به شکل زیر تغییر میدیم :

function execute(someFunction, value) {
someFunction(value);
}
execute(function(word){ console.log(word) }, "Hello");


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

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

حالا برگردیم سراغ کد اصلی :

var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);

با توجه به مثال بالا الان مشخصه که چطور تابع گمنام رو هنگام ایجاد سرور http ایجاد کردیم :
خط های 2و3و4 هم به ترتیب وقتی درخواستی به سرور ارسال میشه نوع هدر ، عبارتی برای چاپ در مرور گر و پایان پاسخ به درخواست رو مشخص می کنه

حالا برای اون تابع گمنام اسمی رو مشخص می کنیم تا خوانایی کد بهتر بشه و کد ما به شکل زیر تغییر پیدا می کنه :
var http = require("http");
function onRequest(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
موفق باشید
پایان قسمت دوم
در قسمت سوم کنترلر در خواست های ارسالی و قالب رو بررسی خواهیم کرد.



نویسنده : فرهاد مهریاری
منبع : انجمن تخصصی فناوری اطلاعات ایران
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.
برچسب ها
ردیف عنوان قیمت
1 آموزش node js قسمت اول رایگان
2 آموزش node js قسمت دوم رایگان
3 node js قسمت سوم رایگان
4 node js و npm شروع کار رایگان
5 nodejs و express js | معرفی رایگان
6 nodejs , express js توسعه برنامه تحت وب رایگان
مطالب مرتبط
نظرات
  • دوست عزیز سلام .
    ممنون از اموزش های خوبی که گذاشتی . می خواستم از شما یه مقدار راهنمایی بگیرم .
    ما یه گروهی تشکیل دادیم واسه درس PL تو دانشگاه که باید به پروژه ایی در این زمینه انچام بدیم .
    اگه می شه یه مقدار بیشتر درباره این زبان بتونید اطلاعات خوبی رو به بنده بدبد به طوری که بتونیم از یه جا شروع کنیم به انجام تقسیم بندی کارها و شروع پروژه ممنون می شم .
    من هنوز درباره این زبان خیلی مظلب تو وب نخوندم ولی به جا خوندم که می گفت می تونید از این زبان تو طراحی چت روم ها استفاده کنید و تو این زمینه خیلی می تونه قوی باشه .
    حالا اگه میشه بنده رو در ابن زمینه ها راهنمایی کنید .

    چرا اصلا این زبان به وجود اومده ؟
    چه نیاز هایی رو تونسته تا حالا بر اورده کنه ؟
    با چه پایگاه های داده ایی کار می کنه ؟
    ضعف ها این زبان کجاست و اینکه از لحاظ امنیت در چه سطحی قرار داره ؟

    ممنون می شم که اطلاعات مفیدی رو در اختیار بنده بزارید .
    با تسکر از شما
  • دلیل بوجود اومدن این بود که ایجاد برنامه های تحت وب با سایر زبان ها از جمله asp.net , php , java , perl ,...
    به خاطر real time نبودن با مشکلاتی مواجه میشد، برای مثال فرض کنید برنامه ی تحت وب ما یک برنامه ساده ارسال و دریافت پیغام هست
    وقتی کاربر میخاد چک کنه که پیغام جدیدی داره یا نه یا باید خودش صفحه رو رفرش بکنه که دیتا مجدد از سرور بارگذاری بشه که تو این حالت کل اطلاعات صفحه مجدد از سرور بارگذاری میشه که ما فقط میخایم ببینیم پیغام جدید داریم یا نه پس این خوب نیست، یه راه دیگه هم استفاده از آجاکس هست که تو آجاکس ما میتونیم فقط اون اطلاعاتی رو که لازم داریم رو از سرور دریافت کنیم ولی اشکال این روش هم اینه که ما وقتی از آجاکس استفاده می کنیم یک باری درخواست به سرور ارسال میشه پاسخ میاد که پیغام جدیدی ندارین ! فرش کنین تو ارسال 50 ام یه پیغام به این کاربر ارسال بشه ، یعنی اون 50 تا درخواست آجاکسی که ارسال شده بی فایده بود . اینجاس که node js ظاهر میشه :
    در node به خاطر معماری رویداد محور ما می تونیم طوری برنامه رو ایجاد بکنیم که وقتی سرور پیغام جدیدی داشت خودش اون رو به کلاینت بفرسته همین مورد برای ایجاد سایت چت و یا سیستم کنفرانس تحت وب هم خیلی کاربرد داره
    پایگاه داده هم بیشتر از MongoDB استفاده می کنن
    (به خاطر مشکلاتی که بود و هست نتونستم این آموزش رو ادامه بدم ولی تو اولین فرصت با آموزش قسمت سوم در خدمت دوستان خواهم بود )
  • ممنون از پاسختون . راستی یه جند تا سوال دیگه هم داشتم تو این زمینه .
    محیط برنامه نویسی و ادیتورش چی باید باشه ؟ می تونیم با ویژوال استدیو کار کنیم ؟
    این زبان برتامه نویسی می تونه با پایگاه داده sql server ارتباط برقرار کنه ؟
    و در اخر هم اگه منبع خوبی در این زمینه در نظر دارید ممنون می شم راهنمایی بفرمایید
    خیلی ممنون از شما .
  • با هر ادیتوری که بخاین میتونین کار کنین از همون nodepad بگیرین تا Dream weaver ولی چند تا ادیتور هم هست که مخصوص خود node هستش :
    komodo-ide
    WebStorm/PhpStorm
    Aptana Studio
    Sublime Text
    Nide

    ابزاری هم وجود داره برای ویژوال که توش node کار کنین ، از آدرس زیر می تونین دانلود بکنین :
    Node Js tools for Visual Studio

    برای اتصال به پایگاه داده Sql server هم از سایت npmjs.com پکیج mssql رو دانلود کنین با اون این امر امکان پذیره
  • اقا خیلی ممنون . نکات مفیدی بود .
    فقط این که الان شما پروژه ایی تو این زمینه سراغ دارید یا خودتون نوشتید که من بتونم با ساختار دستوراتش اشنا بشم .
    و اینکه میشه برای واسه یه برنامه یه قسمتی رو با Asp.net طراجی کرد و بعدش یه قسمتش دیگه رو با Node نوشت و پیاده سازی کرد ؟
    معمولا چه پروژه هایی بیشتر تو این زمینه انجام می شه ؟ من می تونم واسه یه ازمون اینترنتی از این زبان استفاده کنم یا اینکه تو این مورد
    خودشو کمتر نشون می ده ؟
    بازم ممنون . خیلی لطف کردید . . .
    منتظر قسمت سوم این اموزش هستیم ...
    موفق باشید .

  • خواهش میکنم
    پروژه خاصی نه فقط چند مورد فایل تمرین هست
    و اینکه یه قسمتی با یه زبان یه قسمتی با یه زبان دیگه بستگی به ساختار پروژه تون داره
    برای مثال من یه بار سیستم مدیریت آموزشی نوشته بودم برای آموزشگاه که قسمت تحت وب اون با زبان php بود و نرم افزار حضور غیاب رو با زبان سی شارپ نوشته بودم چون پایگاه داده هردو یکی بود خیلی ساده این پروژه رو با استفاده از دو زبان مختلف نوشتم
    شما هم بسته به پروژه تون میتونین توی سرور هم IIS نصب کنین هم node js و از هردو استفاده کنین هرکدوم توی پورت خودشون
    سایت هایی از قبیل خبرگذاری ، وب سایت شخصی ، تفریحی ، انجمن ، سایت های معمولی رو با node نمی نویسن چون همینا رو با سایر زبان ها میشه به راحتی نوشت ، بیشتر مواردی که برنامه تحت وب هست رو با استفاده از node js مینویسن مواردی مثل ویدیو کنفرانس ، چت ، سیستم رزرواسیون و یا مواردی که درخواست های بین سرور و کلاینت خیلی زیاد هست
    برای آزمون هم خوبه
  • یه لطف می کنی یه نمونه از این فایل های تمرینی رو برام بزارید . ببینم ساختارش چه جوریه ؟
    اخه تو این ارائه هدف فهموندن و به قول خودمون حس گرفتن بچه ها نسبت به ساختار این زبان هستش. یعنی ارائه یه طوری باشه که اگر کسی اصلا با این زبان اشنایی نداره بتونه خوب بفهمه یه سری از مفاهیم رو و اگر خواست به این سمت بره که با این زبان برنامه نویسی کنه مسیر و هدف براش روشن باشه . یعنی هر گروه علاوه بر پروژه ایی که داره باید درباره قابلیت های خوانایی و نوشتاری و فابلیت اطمینان و ترجمه و تفسیر یه زبانی که تا حالا باهاش کار نکردن بتونه ارائه خوبی داشته باشه .
    نکات شما هم خیلی مفید بود . ممنون.

  • سلام . حالتون خوبه . اقا چه جوری میشه از کد های HTML , Css همراه با Node.js استفاده کرد ؟ می شه یه مثالی برام بزنید ببینم چه جوری می تونم این کار رو انجام بدم ؟ ممنون


  • تا حالا ازش استفاده نکردم
    (فایل های تمرین رو هم توشون یکم پیچیداس تو اولین فرصت تر تمیز می کنم براتون میفرستم)
  • سلام ممنون،
    شما آموزش قسمت دوم رو تا آخر انجام دادین؟
    یعنی اون عبارت تو مرور گر چاپ شد؟
    تو همون فایل های تمرین من همین کار و انجام دادم یعنی همون استفاده از html,css,jquery
  • بله . امتحان کردم و نتیجه رو تو مرورگر دیدم یه چند تا مثال های دیگه ای رو هم انتحان کردم . خیلی دزگیره این بودم که بتونم تو ویژوال اینکار رو انجام بدم و بلاخره امروز موفق شدم از طریق همون محیط برنامه رو اجرا کنم . حالا فقط مونده ترکیب جند تا چیز . یکیش همینی که خدمت شما عرض کردم . شما تو تمرینی که تو بالا اوردید که از Html , Css استفاده نکردید که ؟ من یه چند تا مثال دیدم از این نمونه ولی متوجه نشدم چه جوری باید ازشون استفاده کنم . اگه شما در این مورد اطلاعاتی دارید ممنون می شم راهنمایی بفرمایید . مثالا من الان بخوام یه همچین صفحه ایی رو تو ُSulotion Explorer ویژوال بخوایم درست کنیم باید حتما تو یه مسیر خاصی باشه . درسته ؟ ولی هر کاری می کنم که بتونم اینکار رو انجام بدم برنامه اجرا نمی شه و مرورگر نمی تونه به ادرس اون پرت بره ؟ چرا ؟


    var http = require('http'),
        fs = require('fs');
    
    
    fs.readFile('./index.html', function (err, html) {
        if (err) {
            throw err; 
        }       
        http.createServer(function(request, response) {  
            response.writeHeader(200, {"Content-Type": "text/html"});  
            response.write(html);  
            response.end();  
        }).listen(8000);
    
    });
    


    و این هم یه لینک دیگه که توش اومده توضیح داده .
    نمونه کد های Html . Css & Node.JS
  • سلام . میشه در مورد نحوه استفاده از کد های زیر بنده رو راهنمایی کنید :

    var express = require('express');
    var forms = require('forms');
    var csurf = require('csurf');
    var collectFormErrors = require('express-stormpath/lib/helpers').collectFormErrors;
    var stormpath = require('express-stormpath');
    var extend = require('xtend');
    
    // Declare the schema of our form:
    
    var profileForm = forms.create({
      givenName: forms.fields.string({
        required: true
      }),
      surname: forms.fields.string({ required: true }),
      streetAddress: forms.fields.string(),
      city: forms.fields.string(),
      state: forms.fields.string(),
      zip: forms.fields.string()
    });
    
    // A render function that will render our form and
    // provide the values of the fields, as well
    // as any situation-specific locals
    
    function renderForm(req,res,locals){
      res.render('profile', extend({
        title: 'My Profile',
        csrfToken: req.csrfToken(),
        givenName: req.user.givenName,
        surname: req.user.surname,
        streetAddress: req.user.customData.streetAddress,
        city: req.user.customData.city,
        state: req.user.customData.state,
        zip: req.user.customData.zip
      },locals||{}));
    }
    
    // Export a function which will create the
    // router and return it
    
    module.exports = function profile(){
    
      var router = express.Router();
    
      router.use(csurf());
    
      // Capture all requests, the form library will negotiate
      // between GET and POST requests
    
      router.all('/', stormpath.loginRequired, function(req, res) {
        profileForm.handle(req,{
          success: function(form){
            // The form library calls this success method if the
            // form is being POSTED and does not have errors
    
            // The express-stormpath library will populate req.user,
            // all we have to do is set the properties that we care
            // about and then cal save() on the user object:
            req.user.givenName = form.data.givenName;
            req.user.surname = form.data.surname;
            req.user.customData.streetAddress = form.data.streetAddress;
            req.user.customData.city = form.data.city;
            req.user.customData.state = form.data.state;
            req.user.customData.zip = form.data.zip;
            req.user.save(function(err){
              if(err){
                if(err.developerMessage){
                  console.error(err);
                }
                renderForm(req,res,{
                  errors: [{
                    error: err.userMessage ||
                    err.message || String(err)
                  }]
                });
              }else{
                renderForm(req,res,{
                  saved:true
                });
              }
            });
          },
          error: function(form){
            // The form library calls this method if the form
            // has validation errors.  We will collect the errors
            // and render the form again, showing the errors
            // to the user
            renderForm(req,res,{
              errors: collectFormErrors(form)
            });
          },
          empty: function(){
            // The form library calls this method if the
            // method is GET - thus we just need to render
            // the form
            renderForm(req,res);
          }
        });
      });
    
      // This is an error handler for this router
    
      router.use(function (err, req, res, next) {
        // This handler catches errors for this router
        if (err.code === 'EBADCSRFTOKEN'){
          // The csurf library is telling us that it can't
          // find a valid token on the form
          if(req.user){
            // session token is invalid or expired.
            // render the form anyways, but tell them what happened
            renderForm(req,res,{
              errors:[{error:'Your form has expired.  Please try again.'}]
            });
          }else{
            // the user's cookies have been deleted, we dont know
            // their intention is - send them back to the home page
            res.redirect('/');
          }
        }else{
          // Let the parent app handle the error
          return next(err);
        }
      });
    
      return router;
    };
    



    html
      head
        title=title
        link(
          href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css',
          rel='stylesheet'
        )
      body
        div.container
    
          div.page-header
            h1 My Profile
    
          if errors
            each error in errors
              div.alert.alert-danger
                span #{error.error}
          if saved
            div.alert.alert-success
              span Your profile has been saved
          form.login-form.form-horizontal(method='post', role='form')
            input(name='_csrf', type='hidden', value=csrfToken)
    
            div.form-group
              label.col-sm-4 First Name
              div.col-sm-8
                input.form-control(
                  placeholder='Your first name',
                  required=true,
                  name='givenName',
                  type='text',
                  value=givenName)
            div.form-group
              label.col-sm-4 Last Name
              div.col-sm-8
                input.form-control(placeholder='Your last name',
                  required=true,
                  name='surname',
                  type='text',
                  value=surname)
            div.form-group
              label.col-sm-4 Street address
              div.col-sm-8
                input.form-control(placeholder='e.g. 123 Sunny Ave',
                  required=true,
                  name='streetAddress',
                  type='text',
                  value=streetAddress)
            div.form-group
              label.col-sm-4 City
              div.col-sm-8
                input.form-control(placeholder='e.g. City',
                  required=true,
                  name='city',
                  type='text',
                  value=city)
            div.form-group
              label.col-sm-4 State
              div.col-sm-8
                input.form-control(placeholder='e.g. CA',
                  required=true,
                  name='state',
                  type='text',
                  value=state)
            div.form-group
              label.col-sm-4 ZIP
              div.col-sm-8
                input.form-control(placeholder='e.g. 94116',
                  required=true,
                  name='zip',
                  type='text',
                  value=zip)
            div.form-group
              div.col-sm-offset-4.col-sm-8
                button.login.btn.btn-primary(type='submit') Save
            div.pull-right
              a(href="/") Return to home page
    



    نتیجه کد های بالا در اجرای برنامه .




    حالا سوال اینجاست که من باید چه جوری مثلا توی Nodepad++ یا تو ویژوال استدیو یا تو Node.exe چه جوری باید از این کد های استفاده بشه تا شکل بالا تو مرورگر نمایش داده بشه . ؟ با تشکر
  • این کدی که شما گذاشتین سطحش خیلی پیش رفته است!
    به نظر من بهتره با این فایل تمرینی که براتون گذاشتم شروع کنین :

    دانلود وب اپپلیکشین ساده توسط Node js

    فایل ها رو از زیپ خارج کنید و در سپس فایل run.bat رو اجرا کنید
    آی پی 127.0.0.1 روی پورت 8888 در مرور گر اجرا کنید ، محتویات صفحه ی مورد نظر رو از فایل index.html فرا می خونه
    روی لینک About هم کلیک کنید محتویات صفحه ی About رو نشون میده
  • سپاس از شما.
    با این مثال شما تازه فهمیدم "اینکه یک تابع رو به عنوان پارامتر به تابع دیگه میدیم" مفهومش چیه و از کجا اومده.
    لطفا ادامه بدید و به همین سبک جلو برید. با تشکر

برای ارسال نظر ابتدا به سایت وارد شوید

arrow