it-swarm.asia

Express.js - app.listen vs server.listen

قد يكون هذا سؤالًا أساسيًا للغاية لكنني ببساطة لا أفهمه. ما الفرق بين إنشاء تطبيق باستخدام Express.js وبدء الاستماع إلى التطبيق على المنفذ 1234 ، على سبيل المثال:

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

//app.configure, app.use etc

app.listen(1234);

وإضافة خادم http:

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

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

//app.configure, app.use etc

server.listen(1234);

ماهو الفرق؟
إذا انتقلت إلى http://localhost:1234 ، فسأحصل على نفس الإخراج.

345
Tamas

النموذج الثاني (إنشاء خادم HTTP بنفسك ، بدلاً من إنشاء خادم Express لك) مفيد إذا كنت ترغب في إعادة استخدام خادم HTTP ، على سبيل المثال لتشغيل socket.io ضمن نفس مثيل خادم HTTP:

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 ، لذلك مع القليل من إعادة الكتابة يمكنك تحقيق شيء مماثل دون إنشاء خادم HTTP بنفسك:

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

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});
467
robertklep

هناك اختلاف آخر في استخدام التطبيق والاستماع إلى خادم http عندما تريد الإعداد لخادم https

لإعداد https ، تحتاج إلى الرمز أدناه:

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

سيعود التطبيق من Express خادم HTTP فقط ، ولا يمكنك تعيينه في صريح ، لذلك ستحتاج إلى استخدام أمر خادم https

var express = require('express');
var app = express();
app.listen(1234);
46
Tim

فقط لغرض الالتزام بالمواعيد وتمديد الجواب تيم قليلا.
من الوثائق الرسمية :

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

هذا يجعل من السهل تزويد كل من إصدارات 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);
};
17
Ivan Talalaev

يعد Express عبارة عن غلاف وحدة http التي يتم إنشاؤها لسهولة المطورين بطريقة تجعل ..

  1. يمكنهم إعداد البرامج الوسيطة للرد على طلبات HTTP (بسهولة) باستخدام التعبير السريع.
  2. يمكنهم عرض صفحات HTML ديناميكيًا بناءً على تمرير الوسائط إلى القوالب باستخدام التعبير السريع.
  3. يمكنهم أيضا تحديد التوجيه بسهولة باستخدام التعبير السريع.
5
Sarim Javaid Khan

جئت مع نفس السؤال ولكن بعد جوجل ، وجدت أنه لا يوجد فرق كبير :)

من جيثب

إذا كنت ترغب في إنشاء خادم HTTP و HTTPS ، فيمكنك القيام بذلك باستخدام الوحدات النمطية "http" و "https" كما هو موضح هنا.

/**
 * Listen for connections.
 *
 * A node `http.Server` is returned, with this
 * application (which is a `Function`) as its
 * callback. If you wish to create both an HTTP
 * and HTTPS server you may do so with the "http"
 * and "https" modules as shown here:
 *
 *    var http = require('http')
 *      , https = require('https')
 *      , express = require('express')
 *      , app = express();
 *
 *    http.createServer(app).listen(80);
 *    https.createServer({ ... }, app).listen(443);
 *
 * @return {http.Server}
 * @api public
 */

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

أيضا إذا كنت ترغب في العمل مع socket.io راجع بهم مثال

انظر هذا

انا افضل app.listen() :)

4
Muhammad Shahzad