【问题标题】:How to configue expressjs to serve index.html in production mode?如何配置 express js 在生产模式下服务 index.html?
【发布时间】:2017-08-16 08:24:23
【问题描述】:

我正在尝试将我的应用程序部署到我的本地计算机以模拟部署过程。你称之为登台模式或其他。我使用的工具包括 pm2 和 Nginx。

当我直接在我的项目中使用pm2 start server.js 运行我的应用程序时,我可以使用我的网络应用程序。客户端可以通过 Nginx 服务器访问index.html 文件。但我认为这不是生产模式,除非我也使用--env production

所以我把所有需要的文件复制到我项目的dist目录,配置Nginx来提供静态内容,在我的源代码中,我想使用

app.get('/', function(req, res) {
    res.sendFile('index.html', {root: somePath});
});

允许客户端访问快速服务器上的index.html 文件。但我不确定在somePath 中输入什么?当我将项目部署到服务器时,我将服务器端和客户端分开。例如,我的服务器端在/usr/path/server,但我的客户端在/etc/shared/html。如果我弄乱了路径,我将收到一条“禁止”错误消息 当我访问index.html时表达。

【问题讨论】:

标签: node.js production


【解决方案1】:

如果您想在开发过程中实现类似生产的可重复性,那么您应该使用相同的工具实现相同的功能。

现在docker compose 是解决此问题的最佳解决方案。一开始你应该有两个容器,第一个是 nginx,第二个是 pm2。您还应该将静态文件的卷绑定/挂载到 nginx。

【讨论】:

  • 是的,我打算稍后使用 docker。但是在这个阶段我需要把它快速放到互联网上。
  • 在我看来,docker compose 是在生产中展示应用程序风格的最简单的解决方案。如果您需要更快更脏的东西,那么您可以使用代码黑客(例如:@ArtemIlchenko 建议的 serve-static)或简单且免费的工具在互联网上发布(例如:c9.io
【解决方案2】:

您的代码应该是这样的。

 var path = require('path');
 var virtualDirPath = process.env.virtualDirPath || '';
 var appDir = path.dirname(require.main.filename) + virtualDirPath;

appDir 将提供环境目录,您可以从中访问html 文件。

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2015-02-12
    • 2013-06-28
    • 1970-01-01
    • 2012-03-12
    • 2019-10-19
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多