اذهب إلى المحتوى

السؤال

نشر

قمت بإضافة express.js من جهة الخادم node.js ولاحظت وجود طريقتين للتضمين ضمن الكود:

var express = require('express');
var app = express();

app.listen(3000);

والشكل التالي:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);


server.listen(3000);

ما الفرق بين هذه الطرق؟ وهل يجب استخدام إحداها أفضل من الأخرى؟

Recommended Posts

  • 1
نشر

الفرق الآخر هو في حالة اختيار مخدم بشكل https الخاص بالاتصال الآمن حيث أن express يعيد http.Server object أما في الطريقة الثانية يمكننا بناء المخدم من https:

var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
    console.log('Https App started');
});

الشكل الافتراضي لكليهما:

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

وإن أردت جعل express يشغل كلاً من http - https يمكن استعمال المنطق التالي:

// تضمين مكتبات
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

// إعادادات https
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

// تجهيز المخدم

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

// تشغيل المخدمين
httpServer.listen(8080);
httpsServer.listen(8443);

 

  • 1
نشر (معدل)

في الطريقة الثانية تقوم أنت بالقيام ب إنشاء server بنفسك ولكن في الطريقة الأولى يقوم express بالقيام بذلك بدلاً عنك حيث أن ربما تستخدم ال HTTP server في وظيفة أخرى مثل استخدام socket.io سيكون كالتالي

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require('socket.io').listen(server);
...
server.listen(1234);

مع أن أيضاً app.listen() تقوم بإرجاع الكائن HTTP server  

تم التعديل في بواسطة عبدالباسط ابراهيم
خطأ إملائي
  • 1
نشر

لا يوجد سبب حقيقي لإنشاء خادم http الخاص بك باستخدام وحدة http. سوف يقوم Express بعمل ذلك نيابةً عنك من خلال app.listen 

اذا اطلعت على شيفرة المصدر الخاصة ب express في github وتحديدا الطريقة listen سترى أن express يهيأ http لك

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

 

إذا كنت تقوم بإنشاء خادم https ، فستحتاج إلى استخدام وحدة https وتمرير بيانات اعتماد الأمان إلى https.createServer من أجل إنشاء خادم تم تكوينه بشكل صحيح. لا يمتلك Express القدرة على إنشاء خادم https مهيأ بشكل صحيح لك تلقائيًا.

أيضا عند استخدام socket io كما ذكر الاخوة في التعليقات السابقة هنا يمكن استخدام http server وذلك حتى تتمكن من لصق socket الى السرفر لـن express لا يقوم بذلك ختاما يجب استخدام http فقط في حالة اذا كنت تريد ربط شئ بذلك الخادم أو تعديل معاييره

  • 0
نشر

من التوثيق الرسمي ل express

اقتباس

التطبيق الذي تم إرجاعه بواسطة express () هو في الواقع دالة JavaScript ، تم تصميمها ليتم تمريرها إلى خوادم HTTP الخاصة بـ Node ك callback للتعامل مع الطلبات.

هذا يجعل من السهل توفير كل من إصداري HTTP و HTTPS من تطبيقك بنفس قاعدة الكود ، حيث أن التطبيق لا يرث من هذين

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
اقتباس

تقوم دالة app.listen () بإرجاع كائن http.Server و (لـ HTTP) هي طريقة ملائمة لما يلي:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...