Angular 2:在新标签和商店请求网址

时间:2016-10-26 13:33:04

标签: angular typescript nancy

我们正在使用带有Typescript的Angular 2应用程序。服务器是一个轻量级的NancyFX(C#),配置为响应重定向到" /"如果进行了未知的api呼叫。

所以我们要做的是: 应用程序已启动,用户已登录。现在,他想要打开第二个选项卡,通过"在新选项卡中打开链接"或使用CTRL +单击。

应用程序再次使用某种路径URL在新标签页中打开(例如" / order / 5")。服务器响应重定向到" /" (基本角度路线),应用程序启动,加载所有有角度的东西,被重定向到基本路线并检查是否有可供用户使用的令牌,如果是 - >>它应该重定向到原始请求URL

问题:原始网址请求(" / order / 5")已消失,因为服务器仅重定向到" /"。

是否有可能以任何方式存储URL(例如在localstorage中),以便客户端知道重定向的位置?

我读到了一些关于阅读关键/点击事件的内容,但这有点骇人听闻。

我看到的唯一方法是保留服务器代码中的URL,但这必须分别针对每个浏览器会话或某种window.history进行,但我们应该如何知道这是一个新的会话还是只是一个页面刷新??

我们使用默认的PathLocationStrategy。

有人有想法或者只是不可能吗?

更新: 我的南希托管模块

public HostingModule()
    {
        Get["/"] = o => Response.AsFile(Path.Combine(Response.RootPath, "index.html"));
        Get["/{ignored*}", ctx => ctx.Request.Headers.Accept.Any(x => x.Item1 == "text/html")] = o =>
            {
                return Response.AsFile(Path.Combine(Response.RootPath, "index.html"));

            };
    }

因此,所有带有text / html标头的请求都应该被接受并返回默认的index.html。这有效。

但是:问题是index.html中的所有文件都被请求与原始路径相对: e.g。

第一个请求:" foo.com/order/5" - >响应index.html - >之后客户端开始加载index.html中的所有脚本 - >但是由于请求是foo.com/order/5,所有脚本都尝试加载: foo.com/order/script1.js而不是foo.com/script1.js

- >所以我只得到了一堆404错误,或者如果我将重定向StatusCodehandler保留为404错误,它会一次又一次地将客户端重定向到index.html ......

但是感谢您的帮助

1 个答案:

答案 0 :(得分:0)

因此,您需要重定向才能显示包含角度应用的index.html。我解决这个问题的方法是使用2条路由,索引路由和一条寻找带有text/html值的accept头的贪婪路由(应该是任何浏览器请求)

第一条路线是:

Get("/", ...);

这是索引着陆页。

第二条路线是使用贪婪的路线:

https://github.com/NancyFx/Nancy/wiki/Defining-routes#pattern

Get("/{ignored*}", ..., ctx => ctx.Request.Headers.Accept.Any(x => x.Item1 == "text/html"));

因此,任何不寻找html的请求,都会返回默认页面。虽然应该看起来接受application/json的角度的任何内容都会响应所有其他查询。