【问题标题】:express runs on two ports even when port is specified即使指定了端口,express 也会在两个端口上运行
【发布时间】:2016-06-20 12:43:49
【问题描述】:

我使用 app.listen(PORTNO) 运行我的 express 应用程序。

它在127.0.0.1:PORTNO 上运行,也可以在127.0.0.1:3000 上运行

3000 是 express 开箱即用的默认端口号。

为什么会出现这种意外行为?

我尝试将 env 变量设置为生产环境并使用 http.createServer(app).listen(PORTNO);

我正在使用express-generator 生成我的快速应用程序文件。

如果相关,我在 Windows 机器上

更新: 我使用运行bin\wwwnpm start 启动服务器,它指定了运行服务器的端口。 但这并不能解释绑定到两个端口:一个在app.js 中指定,另一个在bin\www 中为同一个应用程序指定,并且该应用程序可以从它们两者访问。

你能解释一下原因吗?

【问题讨论】:

  • 您能否提供更多详细信息,例如创建服务器的代码。请确保在启动新实例之前杀死所有以前的实例。
  • 刚刚更新了问题。该代码是使用 express-generator skelton 代码生成的,仅对设置端口进行了少量修改。另外我已经杀死了所有实例并尝试了
  • express-generator 没有把app.listen() 放在app.js 里面,所以是后面加的东西。
  • PORTNO 的值是多少?
  • @robertklep 是的,这是设置端口号的一种方法。我添加了

标签: javascript express server


【解决方案1】:

你应该使用 node server.js(filename) 来启动你的服务器。如果有帮助,请尝试此操作,因为当您使用 npm 启动它时,它将获得默认配置。此外,npm 命令用于安装节点模块(主要)而不是运行服务器。

【讨论】:

  • node app.js 退出而不运行服务器。我想知道为什么会这样,你能解释一下为什么吗?
  • 它可能会发生,因为您尝试运行的端口已经在运行同一个 app.js 实例。或者该端口已经与某个应用程序绑定。所以现在您知道您的 app.js 不起作用。再次杀死所有实例,然后再次尝试运行 node app.js。这可能会有所帮助!
  • node app.js 不会做任何事情,因为它是一个模块。如果你看bin\www的源码,你会看到app.js正在里面加载,listen函数在bin\www中被调用。
  • @HageYaapa 这很有意义,因为我有时间研究 bin\www 的代码。这也意味着正在创建两个http 对象,其中一个在app.js 中,另一个在bin\www 中,因此我可以从两个不同的端口访问该应用程序。我从来没有研究过 bin\www 的代码,认为它一直是自动生成的,就像在 Java 中发生的那样
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
相关资源
最近更新 更多