در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

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

به نام خدا

در قسمت اول آموزش 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);

موفق باشید

پایان قسمت دوم

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


نویسنده : فرهاد مهریاری

منبع : انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#آموزش_node #آموزش_node_js #آموزش_node_js_قسمت_دوم
عنوان
1 آموزش node js قسمت اول رایگان
2 آموزش node js قسمت دوم رایگان
3 node js قسمت سوم رایگان
4 node js و npm شروع کار رایگان
5 nodejs و express js | معرفی رایگان
6 nodejs , express js توسعه برنامه تحت وب رایگان
زمان و قیمت کل 0″ 0
14 نظر
علی  ورزشی

دوست عزیز سلام .

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

ما یه گروهی تشکیل دادیم واسه درس 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 رو نشون میده

مهدی ربانی

سپاس از شما.

با این مثال شما تازه فهمیدم "اینکه یک تابع رو به عنوان پارامتر به تابع دیگه میدیم" مفهومش چیه و از کجا اومده.

لطفا ادامه بدید و به همین سبک جلو برید. با تشکر

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....