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

    عضویت در

    کانال تلگرام

    توسینسو

    اطلاعات مطلب
      مدرس/نویسنده
      فرهاد مهریاری
      امتیاز: 11843
      رتبه:53
      0
      20
      43
      388
      مدرس برنامه نویسی تحت وب و فتوشاپ توسعه دهنده ی سیستم های cross platform آشنا به تدوین کلیپ و تیزر های تبلیغاتی || خیلی زیاد برنامه نویسی دوست دارم و ابتدای ورود من به حوزه فناوری اطلاعات با نرم افزار فتوشاپ و طراحی از سن 14 سالگی :) شروع شد که بعد از اون کم کم برنامه نویسی رو شروع کردم خیلی زیاد هم دوست دارم. پروفایل کاربر

      nodejs , express js توسعه برنامه تحت وب

      تاریخ 24 ماه قبل
      نظرات 0
      بازدیدها 539
      به نام خدا
      سلام دوستان عزیز

      در قسمت قبلی سری آموزش node js نحوه نصب و راه اندازی express توضیح داده شد حالا قصدمون این هست که نحوه راه اندازی یک سایت یا برنامه تحت وب از طریق express , nodejs یاد بگیریم.


      وارد اون پروژه ای که در قسمت قبل ساختیم میشیم از طریق کنسول با دستور npm start اجراش می کنیم :
      توی کنسول آدرس فایلی رو که فراخوانی کرده رو نشون میده
      bin/www
      همین فایل رو با ویرایشگر باز می کنیم ببینیم چی به چیه !
      #!/usr/bin/env node
      
      /**
       * Module dependencies.
       */
      
      var app = require('../app');
      var debug = require('debug')('app1:server');
      var http = require('http');
      
      /**
       * Get port from environment and store in Express.
       */
      
      var port = normalizePort(process.env.PORT || '3000');
      app.set('port', port);
      
      /**
       * Create HTTP server.
       */
      
      var server = http.createServer(app);
      
      /**
       * Listen on provided port, on all network interfaces.
       */
      
      server.listen(port);
      server.on('error', onError);
      server.on('listening', onListening);
      
      /**
       * Normalize a port into a number, string, or false.
       */
      
      function normalizePort(val) {
        var port = parseInt(val, 10);
      
        if (isNaN(port)) {
          // named pipe
          return val;
        }
      
        if (port >= 0) {
          // port number
          return port;
        }
      
        return false;
      }
      
      /**
       * Event listener for HTTP server "error" event.
       */
      
      function onError(error) {
        if (error.syscall !== 'listen') {
          throw error;
        }
      
        var bind = typeof port === 'string'
          ? 'Pipe ' + port
          : 'Port ' + port;
      
        // handle specific listen errors with friendly messages
        switch (error.code) {
          case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
          case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
          default:
            throw error;
        }
      }
      
      /**
       * Event listener for HTTP server "listening" event.
       */
      
      function onListening() {
        var addr = server.address();
        var bind = typeof addr === 'string'
          ? 'pipe ' + addr
          : 'port ' + addr.port;
        debug('Listening on ' + bind);
      }
      
      

      سطر های یک تا سه ، سه تا ماژول اضافه کرده که ماژول اول (app) ماژول در پوشه اصلی برنامه به نام app.js موجود هست که با اون زیاد کار داریم
      بعدش به کد زیر می رسیم :
      var port = normalizePort(process.env.PORT || '3000');
      خیلی ساده میخاد پورت تعریف شده در environment رو بگیره و به عنوان پورت برنامه ما در سرور http در نظر بگیره اون رو به عنوان پارامتر ورودی به تابع normalizePort میده که اگه false شد (پورت در دسترس نبود) پورت 3000 رو در نظر بگیره خود تابع normalizePort هم در سطر 36 تعریف شده
      بعدش توی ماژول app برای مشخصه ی port ، پورت مورد نظر رو تعریف می کنه
      در سطر بعدی از ماژول http تابع createserver رو با پاراتر ورودی app فراخوانی می کنه و اون شی رو توی متغییر server قرار میده
      در سطر بعدی مشخص میکنه که شی server به کدوم پورت گوش کنه
      و بعد برای دو تا event یا رویداد error , listening که در سرور رخ میده ، توابعی رو تعریف میکنه
      یعنی وقتی توی شی سرور خطایی رخ داد تابع onError اجرا بشه

      خب این از این فایل حالا برگردیم به فایل app.js که در ابتدای این فایل از اون به عنوان ماژول app استفاده کردیم
      محتویات فایل app.js :
      var express = require('express');
      var path = require('path');
      var favicon = require('serve-favicon');
      var logger = require('morgan');
      var cookieParser = require('cookie-parser');
      var bodyParser = require('body-parser');
      
      var routes = require('./routes/index');
      var users = require('./routes/users');
      
      var app = express();
      
      // view engine setup
      app.set('views', path.join(__dirname, 'views'));
      app.set('view engine', 'jade');
      
      // uncomment after placing your favicon in /public
      //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
      app.use(logger('dev'));
      app.use(bodyParser.json());
      app.use(bodyParser.urlencoded({ extended: false }));
      app.use(cookieParser());
      app.use(express.static(path.join(__dirname, 'public')));
      
      app.use('/', routes);
      app.use('/users', users);
      
      // catch 404 and forward to error handler
      app.use(function(req, res, next) {
        var err = new Error('Not Found');
        err.status = 404;
        next(err);
      });
      
      // error handlers
      
      // development error handler
      // will print stacktrace
      if (app.get('env') === 'development') {
        app.use(function(err, req, res, next) {
          res.status(err.status || 500);
          res.render('error', {
            message: err.message,
            error: err
          });
        });
      }
      
      // production error handler
      // no stacktraces leaked to user
      app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
          message: err.message,
          error: {}
        });
      });
      
      
      module.exports = app;
      
      8 سطر اول ماژول های مورد نیاز ما هستند که از مهم ترین اون ها ماژول express هست که توی سطر 11 اون رو در متغییر app قرار دادیم.
      دو تا ماژول routes , users هم در واقع آدرس های دلخواهی هستند که وقتی توی مرورگر اون آدرس ها به وارد می شوند برای اون ها پاسخ مناسبی ارسال میشه
      برای همین فایل index.js رو از پوشه routes باز می کنیم :
      var express = require('express');
      var router = express.Router();
      
      /* GET home page. */
      router.get('/', function(req, res, next) {
        res.render('index', { title: 'Express' });
      });
      
      module.exports = router;
      
      اینجا ما مشخص می کنیم که وقتی با متد GET درخواست آدرس / (که میشه همون صفحه ی اصلی) ارسال بشه چه اتفاقی بیفته
      که اینجا ما تابع router.get رو با دو پارامتر که اولی آدرس و دومی یک تابع بازگشتی هست فراخوانی میکنیم
      تابع بازگشتی پارامتر اولش req یا همون درخواست هست پارمتر دوم هم res همون پاسخی هست که به view ارسال می کنیم
      که res.render در پارامتر اول اسم view مورد نظر رو داره و در پارامتر دوم می تونیم دیتا یا هر اطلاعاتی که خواستیم در قالب json به view بفرستیم
      خب حالا این view کجاست؟
      توی پوشه views فایل index.jade این همون view هست که اینجا اون رو برای صفحه ی / تعریف کردیم
      خب پسوند jade چیه ؟
      jade که جدیدا به pug تغییر نام داده یک template engine هست که ویفه اون قالب بندی برنامه ما هست
      حالا برگردیم به app.js
      توی سطر 14 مسیر پوشه views رو در ماژول app توی مشخصه views قرار میده
      توی سطر بعدی template engine یا همون view engine موتور قالب بندی رو تعریف میکنه
      (برای express میتونیم از موتور های دیگه هم از جمله handlebars یا ejs و یا بدون موتور همون html ساده استفاده بکنیم )
      توی سطر 25
      برای آدرس های ماژول routes رو تعریف میکنه با این کد وقتی آدرس رده میشه اون ماژول routes/index.js که توضیح داده شد ، اتفاق میوفته
      برای آدرس /users هم دقیقا به همین ترتیب عمل میکنه و نهایتا در سطر آخر که متغییر app رو که بالا تعریف کردیم به عنوان ماژول export میکنه.
      خب بریم سراغ views
      فایل index.jade :
      extends layout
      
      block content
        h1= title
        p Welcome to #{title}
      
      
      extends layout
      قالب هدر یا مادر رو جایگزین میکنه که در همون پوشه فایل layout.jade هست
      block content محتویات این فایل هست که میره در block content موجود در فایل layout.jade جایگزین میشه
      سطر بعدی h1= title یک تگ h1 ایجاد میکنه که محتوای اون متغییر title ی هست که در روتر index.js تعریف شد
      سطر بعدی هم یک تگ paragraph ایجاد میکنه که محتوای اون عبارت Welcome to به اضافه متغییر title هست که این خروجی رو میتونید با اجرای برنامه توی مرور گر ببینید.

      خب حالا یک نگاه کلی به ساختار و پوشه بندی برنامه مون میندازیم که یک دید کلی ازش داشته باشیم
      node js , express

      توی ریشه فایل app.js . package.json رو داریم که هردوشون توضیح داده شد.
      پوشه bin فایل www رو داره که با فراخوانی اون برنامه اجرا میشه
      پوشه node_modules ماژول های مورد نیازی هس که با Npm نصب می کنیم
      پوشه public فایل های عمومی مثل js ,css , images رو داره
      پوشه routes فایل روتر یا آدرس دهی رو داره که خودمون تعریف می کنیم (یعنی دلخواه هست میتونیم توی app.js هم تعریف کنیم )
      پوشه views هم قالب صفحات هست.

      پایان این قسمت - سوالی داشتین بپرسین

      در پناه حق موفق باشید و امیدوار


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

      در حال دریافت اطلاعات

      نظرات
      هیچ نظری ارسال نشده است

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