一尘不染

Express.js-app.listen与server.listen

node.js

这可能是一个非常基本的问题,但我根本不理解。使用 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,则得到相同的输出。


阅读 283

收藏
2020-07-07

共1个答案

一尘不染

第二种形式(您自己创建一个HTTP服务器,而不是让Express为您自己创建一个HTTP服务器)在您想重用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) {
  ...
});
2020-07-07