C'est peut-être une question très fondamentale, mais je ne comprends tout simplement pas. Quelle est la différence entre la création d'une application à l'aide de Express.js et le démarrage de l'application à l'écoute sur le port 1234, par exemple:
var express = require('express');
var app = express();
//app.configure, app.use etc
app.listen(1234);
et en ajoutant un serveur 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);
Quelle est la différence?
Si je navigue vers http://localhost:1234
, le même résultat sera ainsi obtenu.
Le second formulaire (créer vous-même un serveur HTTP au lieu d’Express en créer un) est utile si vous souhaitez réutiliser le serveur HTTP, par exemple pour exécuter socket.io
au sein de la même instance de serveur HTTP:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
...
server.listen(1234);
Cependant, app.listen()
renvoie également l'instance de serveur HTTP. Ainsi, avec un peu de réécriture, vous pouvez obtenir quelque chose de similaire sans créer vous-même un serveur 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) {
...
});
Il y a une autre différence entre l'utilisation de l'application et l'écoute du serveur http, c'est lorsque vous souhaitez configurer le serveur https.
Pour configurer https, vous avez besoin du code ci-dessous:
var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
console.log('Https App started');
});
L'application d'Express ne renvoie que le serveur HTTP. Vous ne pouvez pas la définir dans Express. Vous devez donc utiliser la commande https server.
var express = require('express');
var app = express();
app.listen(1234);
Juste pour but de ponctualité et étendre un peu la réponse de Tim.
De documentation officielle :
L’application renvoyée par express () est en fait une fonction JavaScript, CONÇU POUR ÊTRE PASSÉ aux serveurs HTTP du nœud en tant que rappel pour traiter les demandes.
Cela facilite la fourniture de la même base de code aux versions HTTP et HTTPS de votre application, car l'application n'en hérite pas (il s'agit simplement d'un rappel):
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
La méthode app.listen () renvoie un objet http.Server et (pour HTTP) est un méthode de commodité pour les éléments suivants:
app.listen = function() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Express est fondamentalement un wrapper de module http qui est créé pour la facilité des développeurs de telle sorte que ..
Je suis venu avec la même question mais après Google, j'ai trouvé qu'il n'y avait pas de grande différence :)
De Github
Si vous souhaitez créer un serveur HTTP et HTTPS, vous pouvez le faire avec les modules "http" et "https" comme indiqué ici.
/**
* 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);
};
Aussi, si vous voulez travailler avec socket.io, voyez leur exemple
Voir this
Je préfère app.listen()
:)