如何防止nodemon在每次重启express应用程序时更改端口?

4

我是nodejs的新手,这是我第一次使用nodemon。我在windows上使用nodejs。我在我的package.json文件中得到了以下内容。

"scripts": {
  "start": "nodemon ./bin/www"
}

我使用命令行中的 npm start 来启动我的 Express 应用程序。该进程从默认端口开始,这很烦人。但更令人烦恼的是,每次我更改文件时,nodemon 都会重新启动应用程序,有时还会在完全不同的随机端口号上。我尝试将 package.json 文件中的 script 部分更改为以下内容,但没有任何区别。

"scripts": {
  "start": "nodemon ./bin/www 3000"
},

好的,我假设你的意思是nodemon在完全不同的端口上启动很烦人。这不应该发生。nodemon的目的是为您提供一个一致的服务器实例,您可以在文件更改时连接到它。您的应用程序中是否有其他可能会在nodemon实例之前不久启动与node.js相同端口的内容?如果您抱怨的是每次更改文件时nodemon都会重新启动,那么您应该选择另一个监视模块,因为这是nodemon的核心功能... - Stephen Wright
嗯,我应该表达得更好。Nodemon在每次更改时重新启动并不是我的抱怨。我的抱怨是每次重新启动都使用新端口。我确认没有其他进程正在使用端口3000。 - Suhas
抱歉,我有点难以理解你的问题。让我澄清一下。所以,无论是 nodemon 还是其他方式触发的重新启动,你的服务器每次重新启动时都会监听不同的端口? - user5283155
@NoobCoder,重启只有通过nodemon触发,并且每次重启都会更改端口。 - Suhas
如果您手动重新启动而没有使用nodemon,端口会发生变化吗?我只是想缩小原因。 - user5283155
如果我不使用nodemon,那么我可以使用node环境变量始终在端口3000上启动express应用程序。 - Suhas
1个回答

1

从评论中看来,您是通过环境变量指定端口的,我们称其为EXPRESS_PORT。当您使用npm启动节点进程时,它不会继承该变量,因为npm start会创建一个具有自己环境的新shell。因此,您最终将端口undefined传递给express。这将使其绑定到一个随机的空闲端口。要解决此问题,您可以在启动命令中设置变量:

"scripts": {
    "start": "EXPRESS_PORT=3000 nodemon ./bin/www"
}

或者您可以使用 export EXPRESS_PORT=3000 命令从 shell 导出它,然后运行 npm start。如果您这样做,需要确保在启动服务器之前始终导出,因此您可能希望将导出放置在 ~/.profile~/.bashrc 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接