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

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

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

در قسمت قبلی سری آموزش 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 قسمت سوم رایگان
4 node js و npm شروع کار رایگان
5 nodejs و express js | معرفی رایگان
6 nodejs , express js توسعه برنامه تحت وب رایگان
مطالب مرتبط
نظرات
هیچ نظری ارسال نشده است

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

    arrow