Express.js-app.listen vs server.posłuchaj.

To może być bardzo podstawowe pytanie, ale po prostu nie rozumiem. Jaka jest różnica między tworzeniem aplikacji przy użyciu Express.js i uruchamianie aplikacji nasłuchującej na porcie 1234, na przykład:

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

//app.configure, app.use etc

app.listen(1234);

I dodanie serwera 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);
Co za różnica?
Jeśli przejdę do http://localhost:1234, otrzymam to samo wyjście.
Author: Mike B., 2013-07-17

5 answers

Drugi formularz (utworzenie serwera HTTP samodzielnie, zamiast tworzenia Express create one dla Ciebie) jest przydatny, jeśli chcesz ponownie użyć serwera HTTP, na przykład, aby uruchomić socket.io w tej samej instancji serwera HTTP:

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

Jednak app.listen() zwraca również instancję serwera HTTP, więc przy odrobinie przepisania można osiągnąć coś podobnego bez tworzenia serwera HTTP samemu:

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) {
  ...
});
 619
Author: robertklep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 06:59:22

Jest jeszcze jedna różnica w używaniu aplikacji i słuchaniu serwera http, gdy chcesz skonfigurować serwer https

Aby skonfigurować https, potrzebujesz poniższego kodu:

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

Aplikacja express zwróci tylko serwer http, nie można go ustawić w express, więc musisz użyć polecenia serwera https

var express = require('express');
var app = express();
app.listen(1234);
 70
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 00:41:05

Tylko w celu punktualności i wydłużenia trochę Tim answer.
Z oficjalnej dokumentacji :

Aplikacja zwracana przez express() jest w rzeczywistości funkcją JavaScript, zaprojektowany do przekazywania do serwerów HTTP węzła jako callback do obsługi prośby.

Ułatwia to dostarczanie zarówno wersji HTTP, jak i HTTPS aplikacji z tą samą bazą kodu, ponieważ aplikacja nie dziedziczy z tych (jest to po prostu wywołanie zwrotne):

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

Aplikacja .listen () metoda zwraca http.Server object and (for HTTP) jest metodą wygodną dla:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};
 35
Author: Ivan Talalaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 11:10:09

Przyszedłem z tym samym pytaniem, ale po google stwierdziłem, że nie ma dużej różnicy:)

From Github

Jeśli chcesz utworzyć serwer HTTP i HTTPS, możesz to zrobić za pomocą modułów "http" i "https", jak pokazano tutaj.

/**
 * 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);
};

Również jeśli chcesz pracować z socket.io zobacz ich przykład

Zobacz to

Wolę app.listen() :)

 11
Author: Muhammad Shahzad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 11:20:56

Express jest w zasadzie opakowaniem modułu http, który jest tworzony dla ułatwienia programistów w taki sposób, że..

  1. mogą skonfigurować middlewares do odpowiedzi na żądania HTTP (łatwo) za pomocą express.
  2. mogą dynamicznie renderować strony HTML na podstawie przekazywania argumentów do szablonów za pomocą express.
  3. mogą również łatwo zdefiniować routing za pomocą express.
 10
Author: Sarim Javaid Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 13:12:18