【问题标题】:Using both http-server and node express server同时使用 http-server 和 node express 服务器
【发布时间】:2017-03-18 12:23:48
【问题描述】:

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

server.js

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

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

既然可以直接运行express,那么这里返回express服务器作为http服务器的参数有什么好处呢?

【问题讨论】:

    标签: node.js express server httpserver


    【解决方案1】:

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

    import Express from 'express'; 
    const app = new Express();
    app.listen(80);
    

    但是,只是为了让您完全了解这里发生了什么。如果你使用app.listen(),它所做的就是这样(如the Express code所示):

    app.listen = function listen() {
      var server = http.createServer(this);
      return server.listen.apply(server, arguments);
    };
    

    它只是创建自己的普通 http 服务器,然后在其上调用 .listen()。


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

    【讨论】:

    • 创建单独的http.Server 的做法非常普遍(例如,socket.io example code 也是如此)。我想很多人都看到了,认为应该这样做。
    • @robertklep - 手动创建自己的 http 服务器没有任何问题。 Express 只是提供了一个快捷方式,可以为您完成。
    • 感谢您的帮助。那么在这种情况下,显式创建一个 http-server 是多余的吗?
    • 我并不是要暗示这是错误,它只是额外的代码 :) 我已经看到它会导致问题,人们调用app.listen() 而不是@ 987654331@,并没有意识到他们启动了一个 new HTTP 服务器,而不是 server 所代表的那个。
    • @Paulos3000 - 这不是多余的。必须有人创造一个。你要么自己创建一个,要么让 express 为你做。但是,让 Express 为您做这件事确实节省了代码。请注意,例如,如果您尝试实例化服务器的 https 版本,那么 Express 无法为您执行此操作,因此您必须手动创建自己的 http 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多