将MEAN堆栈应用程序部署到Heroku

时间:2018-05-30 00:02:35

标签: node.js angular mongodb heroku deployment

我正在尝试将我使用MEAN堆栈构建的应用程序部署到Heroku并且遇到了一些麻烦。我认为问题在于我的应用程序的结构。我将所有服务器代码放在名为server的文件夹中,该文件夹有自己的package.jsonsrc文件夹,其中包含实际的服务器代码。

现在我只是想让Heroku部署应用程序的客户端。我只是收到错误...我知道数据库和服务器没有运行,但我甚至无法通过应用程序的初始显示。我在应用上设置了一个网络dyno 运行 ng serve (npm start)

如果有人愿意查看我的应用程序的结构,并且看到为什么我无法在没有真正深入研究代码的情况下部署到Heroku,那将非常感激。

Here is the code

请注意,它位于deploy分支上,这是故意的。在我确定它正在工作之前,我不想向主人推送任何东西。

1 个答案:

答案 0 :(得分:0)

Angular Web服务器默认以localhost:4200为目标。这可以通过几个命令行选项进行更改。 --port接受端口,--host接受主机IP地址。

因此,您可以按如下方式修改ng服务脚本:ng serve --host [host-ip] --port [port-number] --disableHostCheck。最后一个标志(--disableHostCheck)告诉开发服务器在正常ng serve除localhost之外的任何事情失败时绕过主机检查。如果除了私人开发/测试之外的其他任何东西都有可怕的想法。

另一个问题:Heroku运行web dynos,根据我对它们的理解,他们每次都使用随机端口和IP。虽然随机端口存储在变量$ PORT下,但IP似乎没有类似的变量。 Web dynos将这些信息保留给自己。

Heroku确实提供了这个命令:heroku local web。它在localhost:5000上运行您的应用程序。这意味着ng serve --port 5000与此命令完美配合。这应该告诉你前端如何在Heroku上运行。您的角度开发服务器也将按预期运行。

对于Heroku的实际部署,请使用您的快速服务器。从您的文件系统运行ng build,它将在index.html文件夹中吐出dist。此文件包含整个前端应用程序。然后,您可以从服务器将该文件上传到浏览器中。

对于通常分为以下的快递:

app.get('*', function(req, res) {
    res.sendFile('path/to/index.html');
});

希望这有帮助!如果我在任何地方都错过了标记,请告诉我。