这是初学者问的最多的问题,因为我刚开始的时候就有这个问题
如何在不需要硬编码甚至自己选择端口的情况下为 express 设置端口? 这是我刚开始使用 node 和 express 时遇到的问题(我还是个初学者,还有很多东西要学)。我想知道的事情包括,
- 使用
app.set('port', portNum)
和直接使用app.listen(portNum)
中的端口号有什么 区别?
原文由 Syed Huzaifa Hassan 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在不需要硬编码甚至自己选择端口的情况下为 express 设置端口? 这是我刚开始使用 node 和 express 时遇到的问题(我还是个初学者,还有很多东西要学)。我想知道的事情包括,
app.set('port', portNum)
和直接使用 app.listen(portNum)
中的端口号有什么 区别?原文由 Syed Huzaifa Hassan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现你可以在 --- 0
app.listen()
让 express 随机选择端口,然后我很快发现我现在遇到了一个问题,我不知道要连接哪个端口访问以了解我的服务器是否正在运行。如此简单的答案就是在控制台中输出 app.address().port
一个简单的快速服务器看起来像这样
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)
})
根据我的经验/知识(老实说,它几乎等于零)我开始相信, app.set()
在 app.locals 中设置属性并允许稍后检索该信息(这有点类似于创建变量), 但我最近读到 app.set()
允许存储的值在你的模板引擎和其他地方使用,这使得它非常不同。
在 app.locals 上设置属性和调用 app.set() 有什么区别?
原文由 Syed Huzaifa Hassan 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
如何在不需要硬编码甚至自己选择端口的情况下为 express 设置端口?
###选项一:环境变量(推荐)
通常,您会将应用程序部署到 Heroku 等托管服务提供商。根据主机的配置方式,系统将动态设置一个环境变量,您的应用程序需要从该变量中获取端口。例如,托管服务提供商在运行您的应用程序时可能会运行如下命令:
…在您的代码中,您可以像这样访问此变量:
选项 2 - 特定于环境的配置文件(也强烈推荐)
使用像 config 和/或 dotenv 这样的配置库可以让你轻松管理特定于环境的配置选项。您的文件夹结构如下所示(注意文件名):
然后定义“默认”变量和特定于环境的变量:
默认.json
测试.json
生产.json
配置库将始终使用 默认 变量。当您进行 测试 时,它将使用默认的管理员电子邮件和不同的端口。当您投入 生产 时,它将使用默认端口,但使用不同的管理员电子邮件。您定义“节点环境”的方式是这样的(注意我们使用与 JSON 配置文件相同的名称):
2. 使用
app.set('port', portNum)
和直接使用app.listen(portNum)
中的端口号有什么区别?Express 允许您使用
app.set
设置应用程序变量 --- 但这只是定义变量的一种奇特方式。您稍后可以使用app.get
获取这些变量的值。迟早,您将需要告诉您的应用程序侦听特定端口上的流量。你可以这样做: