Javascript 如何动态设置express server的端口? 这是初学者经常问的问题,因为我刚开始的时候就有这个问题

Javascript 如何动态设置express server的端口? 这是初学者经常问的问题,因为我刚开始的时候就有这个问题,javascript,node.js,express,Javascript,Node.js,Express,如何为express设置端口而不需要硬编码,甚至不需要自己选择端口?这是我刚开始在node和express时遇到的问题,我还是一个初学者,有很多东西需要学习。除此之外我还想知道的事情包括 使用app.set'port',portNum和直接使用app.listenportNum中的端口号有什么区别? 我找到的问题的答案 1.如何动态设置端口? 我发现你可以在应用程序中使用数字0。请听“让express随机选择端口”,然后我很快发现我现在遇到了一个问题,我不知道要访问哪个端口才能知道我的服务器是否

如何为express设置端口而不需要硬编码,甚至不需要自己选择端口?这是我刚开始在node和express时遇到的问题,我还是一个初学者,有很多东西需要学习。除此之外我还想知道的事情包括

使用app.set'port',portNum和直接使用app.listenportNum中的端口号有什么区别? 我找到的问题的答案 1.如何动态设置端口? 我发现你可以在应用程序中使用数字0。请听“让express随机选择端口”,然后我很快发现我现在遇到了一个问题,我不知道要访问哪个端口才能知道我的服务器是否正在运行。答案很简单,就是在控制台中输出app.address.port 因此,一个简单的express服务器将如下所示

let http = require('http');

let express = require('express');
let app = express();

app.use('/', serveStatic('./public'));
app.get('/', (req, res) => {res.render('index')});
let server = http.createServer(app);
server.listen(0, () => {
    console.log(server.address().port)
})
2.使用app.set'port',1234和直接使用app.listen1234中的端口号有什么区别? 根据我的经验/知识,老实说,它几乎等于零。我开始相信,app.set在app.locals中设置属性,并允许稍后检索该信息,这有点类似于创建变量,但我最近读到app.set允许存储的值用于模板引擎和其他地方,这使得情况大不相同。

如何为express设置端口,而无需硬编码甚至自己选择端口? 选项1:建议的环境变量

通常情况下,您会将应用程序部署到托管提供商,如。根据主机的配置方式,系统将动态设置一个环境变量,您的应用程序需要从该变量获取端口。例如,托管提供商在运行您的应用程序时可能会运行以下命令:

$ PORT=1234 npm start
。。。在您的代码中,您可以如下方式访问此变量:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
专业提示:大多数托管提供商也允许您定义自定义环境变量。您可以通过创建如下任意变量在本地进行测试:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
…并从如下代码中访问这些变量:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
选项2-强烈建议使用特定于环境的配置文件 使用像和/或这样的配置库,您可以轻松管理特定于环境的配置选项。您的文件夹结构如下所示,请注意文件名:

|- config
   |- default.json
   |- testing.json
   |- production.json
|- src
   |- app.js
然后定义默认变量和特定于环境的变量:

default.json

testing.json

production.json

配置库将始终使用默认变量。当您进行测试时,它将使用默认的管理员电子邮件和其他端口。当您在生产时,它将使用默认端口,但使用不同的管理电子邮件。定义节点环境的方式如下:注意,我们使用与JSON配置文件相同的名称:

$ NODE_ENV=testing npm start
$ NODE_ENV=production npm start
专业提示:您的配置文件也可以引用环境变量!继续上面选项1中的示例,您可以如下定义生产配置:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
production.json

配置库将查找任何名为PORT的环境变量,并使用该值。综上所述,运行应用程序的最终命令可能如下所示:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
专业提示:-可与库一起使用,实现终极环境变量管理

2.使用app.set'port',portNum和直接使用app.listenportNum中的端口号有什么区别? Express允许您使用app.set设置应用程序变量,但这只是定义变量的一种奇特方式。以后可以使用app.get获取这些变量的值

迟早,你需要告诉你的应用程序监听特定端口上的流量。你可以这样做:

const port = process.env.PORT;
app.listen(port);
const app = express();
app.set('port', process.env.PORT);

app.use((req, res) => { ... });
app.listen(app.get('port'));
config.js app.js 启动服务器 Unix[1]: 登录会话[2]的永久性更高: 在Windows中: 在Windows PowerShell中: [1] 进程处于活动状态,而启动的父进程仍在运行。若您关闭终端,变量将失效


[2] 关闭终端,打开一个新的终端,变量仍然有效。

请突出显示代码并按Ctrl+KIn设置代码格式。除了这个极好的答案之外,我还建议硬编码备用方案。这就是我为本地开发所做的工作——我只在生产中指定一个端口:const port=process.env.port | 3000;我个人不喜欢在代码中定义回退。我宁愿把所有东西都放在一个配置中,我的默认配置包含所有的默认值。如果配置项丢失,我希望应用程序失败,以便我可以将其正确添加到默认配置中。每个人都有自己的想法。@Minsky-绝对。一旦你开始在命令中添加一大堆变量,你就会自然而然地发现关于.env的内容——这就是为什么我省略了它。我更新了答案,把它放在一边。谢谢
$ PORT=1234 node app.js
$ export PORT=1234
$ node app.js
set PORT=1234
$env:PORT = 1234