【问题标题】:Azure Angular Routing not respected in the browser浏览器不支持 Azure Angular 路由
【发布时间】:2018-04-19 00:06:53
【问题描述】:

问题描述

我有一个使用 CLI 组合在一起的 Angular 应用程序,并成功部署到 azure semi。不幸的是,当我导航到我的网站时,浏览器中不尊重路线。基本上,一旦您到达该站点,该路线在浏览器中就是静态的。但仅当部署到天蓝色时。在本地,一切正常。

简单的演练

例如:

假设我们从 - http://my-awesome.site/开始

该路由将加载,它将正常运行。

然后我们点击一​​个链接,将我们带到http://my-awesome.site/route-here

这行得通,它带我去那条路。除非我查看浏览器窗口,它仍然显示:

http://my-awesome.site/

另外,如果我从http://my-awesome.site/route-here 开始,浏览器将反映正确的路线。直到您导航到任何其他路线。基本上,您用于访问我的网站的路线在浏览器中是静态的,我无法更改它。

是什么让我夜不能寐

在本地,一切正常。

localhost:4200/ 有效,点击 localhost:4200/some-route 有效,浏览器更新并反映 localhost:4200/some-route 的新 url

有用的信息

我通过 VSTS 部署到 Azure。我不完全确定引擎盖下发生了什么。老实说,我是部署 Angular 的新手,我真的在“Node.js 体验”中输入了“否”。我最近被告知我的 Windows 应用程序服务器正在运行 IIS 伪装成节点,这让我大吃一惊。

徒劳地尝试以不同的方式解决问题

所以,我建立了一个 Linux 应用服务器并创建了一个 linux 构建服务器,并添加了一个服务器文件夹,其中包含一个 index.js 和 package.json 以及从 John Papa 的 github 借来的代码

index.js

const express = require('express');

const app = express();
const port = process.env.PORT || 4200;
const publicweb = process.env.PUBLICWEB || './dist';
app.use(express.static(publicweb));
console.log(`serving \\${publicweb}`);
app.get('*', (req, res) => {
    tres.sendFile(`index.html`, { root: publicweb });
});
app.listen(port, () => console.log(`listening on http://localhost:4200`));

package.json

{
  "name": "one-with-angular",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "start": "node index.js"
  },
  "private": true,
  "dependencies": {
    "body-parser": "^1.17.2",
    "express": "^4.15.3"
  },
  "devDependencies": {}
}

然后我按照在

找到的教程进行操作

https://blogs.msdn.microsoft.com/wael-kdouh/2017/09/11/deploying-your-angular-application-to-azure-using-visual-studio-team-services-vsts/

成功部署我的网站。

除了那是一堆失败

当我将它部署到我原来的 windows azure 服务器时,路由仍然没有受到尊重。额外的好处是,如果你带着去任何地方的路线进来,你就输了。你得到了一个完整的 404。因为原因。好吧,坦率地说,这就是我在这里的部分原因。

Linux 也不是我成功的关键

不,不,不是。我之前提到过那个 Linux 机器。我完全尝试配置 VSTS 构建以部署在那里。它确实“成功”地部署在那里。我可以从该服务器获得 503 或 404,但我没有得到任何其他信息。

我想要什么

一些方向。

也许我错过了配置文件中的一个设置,它类似于名为“LetAngularRespectRoutesInTheBrowserWhenNotOnLocalhost”的应用程序设置

也许我在那个简单的 index.js 文件中遗漏了一些东西

也许 Linux 实际上是关键,我需要弄清楚那个版本有什么问题。

最后

谢谢

【问题讨论】:

  • 尝试将构建工件下载到您的本地机器并运行它以检查它是否有效?你能用一个新项目重现这个问题吗?如果可以,能否在 OneDrive 上分享示例项目?
  • hrmmmm...如果我构建它,我发布的 dist 文件夹如下所示:1drv.ms/u/s!AhwizZ0b-OWciEhL-S0Bi8gqrgvT
  • 我可以确认,如果我在本地提供该服务(运行“http-server ./”),它会正确路由并正确反映浏览器中的路由。
  • 你的意思是你下载发布的文件(你共享的)并在本地运行它,它工作正常吗?你如何运行这个应用程序?
  • 我使用 http-server 运行它。是的,这就是我的意思。而且,我能够找到问题的解决方案,我会看看我是否无法在下面概述它。

标签: node.js angular azure azure-devops url-redirection


【解决方案1】:

解决方案

是的,我找到了解决方案。

出了什么问题

简短版:我认为没有错

我在一次会议上与一些专家坐下来,共同探讨了这个令人费解的问题。

更多详情

我在 GoDaddy.com 注册了我的域名。然后我设置了一个永久转发到我在 (some-domain).azurewebsites.net 上以 azure 托管该站点的位置。

显然,当您以这种方式重定向时,GoDaddy 会做一些非常有趣的事情。它返回一个带有<iframe></iframe> 的非常简单的页面,该页面实际上指向您的重定向站点。这听起来很荒谬,但是是的。说真的,除非我看到两个获取网页请求,一个在 (my-site).com/some-route 和另一个在 (my-azure-site) 请求相同的页面,否则我不会相信.azurewebsites.net/some-route 来自。

这意味着当我导航到不同的页面时,Angular 正在发挥它的魔力,并尝试按照它应该的方式更新路由。除了所有这些好处都坐在窗户后面进入我的网站<iframe>。所以浏览器永远不会改变它所在的页面。但一切看起来都是正确的。

我们是如何解决的

解决方案实际上相当简单。

修复 DNS 条目

我们只需要更新 GoDaddy 中的几个 DNS 设置。

  • IP 地址
    • 类型:A
    • 姓名:@
    • 值:(ip-address-from-azure)
  • Azure 站点地址
    • 类型:TXT
    • 姓名:@
    • 值:(您的站点).azurewebsites.net

设置图片:GoDaddy Settings

更新 Azure

在 Azure 门户中:

导航到自定义域设置:主页 > (your-site-name) > 自定义域(在设置下)

将您的(拥有的域)添加到自定义主机名列表中。您可能需要对其进行验证,这就是为什么您必须首先进行 DNS 设置(并给它们第二个传播时间)。

设置图片:Azure Settings

最后

感谢那些帮助并试图提供帮助的人。

向在 ngConf 帮助我解决这个问题的专家 Asim Hussain 和 Sander Elias 大声疾呼。

【讨论】:

  • 对不起,我本来打算但忘了我还没有。它不会让我至少在一天之内接受它。
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多