Node.js 同时使用http服务器和node express服务器

Node.js 同时使用http服务器和node express服务器,node.js,express,server,httpserver,Node.js,Express,Server,Httpserver,我看到了node express服务器的以下设置: server.js import { Server } from 'http'; import Express from 'express'; const app = new Express(); const server = new Server(app); 由于可以直接运行express,因此将express server作为http服务器的参数返回有什么好处?express是http服务器的请求处理程序。它需要一个HTTP服务器

我看到了node express服务器的以下设置:

server.js

import { Server } from 'http'; 
import Express from 'express'; 

const app = new Express(); 
const server = new Server(app);

由于可以直接运行express,因此将express server作为http服务器的参数返回有什么好处?

express是http服务器的请求处理程序。它需要一个HTTP服务器才能运行。您可以自己创建一个,然后将
app
作为该应用的请求处理程序传递,或者Express可以创建自己的HTTP服务器:

import Express from 'express'; 
const app = new Express();
app.listen(80);
但是,只是为了让你完全了解这里发生了什么。如果您使用
app.listen()
,它所做的就是这样(如中所示):

它只是创建自己的香草http服务器,然后在上面调用
.listen()



如果您只是使用普通的http服务器,那么它会为您节省一些代码,让Express为您创建它,因此为您自己创建它实际上没有任何好处。如果要创建具有某些特殊选项或配置的服务器,或者要创建HTTPS服务器,则必须自己创建一个,然后使用Express请求处理程序对其进行配置,因为Express仅在您要求它自己创建的情况下创建普通http服务器。因此,如果需要使用特殊选项创建,请自己创建一个。

创建单独的
http.Server
的做法非常普遍(例如,服务器也这样做)。我想很多人都看到了这一点,并认为应该这样做。@robertklep-手动创建自己的http服务器没有错。Express只提供了一个快捷方式,可以帮您完成。谢谢您的帮助。因此,在这种情况下,显式创建http服务器是多余的?我并不是想暗示它是错误的,它只是额外的代码:),我看到人们调用
app.listen()
而不是
server.listen()
,却没有意识到他们启动了一个新的http服务器,而不是由
server
@Paulos3000表示的,它不是多余的。必须有人创造一个。您可以自己创建一个,也可以让express为您创建一个。但是,让Express为您执行此操作确实节省了代码。注意,例如,如果您正在尝试实例化服务器的http和https版本,则Express无法为您这样做,因此您必须手动创建自己的http服务器。
app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};