node.js - 使用net.server一次性处理http和express

标签 node.js handle

我有一个使用 net.Server 的服务器,还有 2 个使用 http.Serverexpress() 的服务器。它看起来像这样

...
var s_net = net.createServer();
var s_http = http.createServer();
var s_exp = express();
s_net.listen(opt.port);
s_http.listen(s_net);
s_exp.listen(s_net);
console.log(`listening on ${opt.port}`);

我使用 s_net 作为 s_https_exp 的处理程序。然后,我做

s_net.on("connection", function(c){
    console.log("incoming connection to s_net")
})
s_http.on("request", function(req, res){
    console.log("request to s_http");
});
s_exp.all("/*", function(req, res, next){
    console.log("request to s_exp");
    res.send("<h1>Hello World!</h1>");
});

但在控制台上,我只是得到

H:\NodeJS\web3>node index.js
listening on 80
request to s_exp

在哪里,它只响应s_exp请求。
我怎样才能得到它们呢?
到 s_net 的传入连接到 s_http 的请求 以及到 s_exp 的请求
引用资料:
https://nodejs.org/dist/latest-v9.x/docs/api/net.html#net_server_listen_handle_backlog_callback

最佳答案

当您使用 Express 创建服务器时,您已经拥有了一个 http 服务器。它只是一个 http 服务器,将 Express 作为传入请求的请求处理程序。而且,http 服务器继承自 net.Server,因此它已经是一个 TCP/IP 服务器。创建一个 Express 服务器,然后您可以使用其上的任何 Express、http 或 net.Server 功能,包括为各种服务器事件设置事件监听器。

因此,只需创建一个通用 Express 服务器就已经具备了这三个功能。没有必要或没有必要创建三个独立的服务器,然后尝试以某种方式将它们组合起来。

关于node.js - 使用net.server一次性处理http和express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47966434/

相关文章:

node.js - 如何将数据引用从一个集合引用到另一个集合? MongoDB

node.js - ffmpeg:当输入缩放到某些尺寸时,xstack 不起作用

java - 在java中实现不透明句柄

c# - 获取应用程序的窗口句柄

c++ - 在析构函数中调用 CloseHandle 会导致运行时内存错误,如何正确关闭结构/类中的文件句柄?

node.js - Mongoose 如何编写带if条件的查询?

node.js - 如何计算 Node 内 MongoDB 集合中的文档数量?

c# - 如何在 C# 中强制创建 Winform 句柄

c++ - 声明 HMODULE 会在运行时抛出异常

node.js - 将函数传递给 Router-Functions 模块