ngRoute 动态 url 作为路径的第一部分

Posted

技术标签:

【中文标题】ngRoute 动态 url 作为路径的第一部分【英文标题】:ngRoute dynamic url as first part of path 【发布时间】:2017-08-10 07:18:11 【问题描述】:

我想在我的网站中创建动态 URL。我在前端使用 Angular 和 ngRoute。我基本上想要这个网址:

mysite.com/home

mysite.com/about

mysite.com/(电台名称)/ - 这是我创建的每个电台的页面

但是当我访问像 whateverUrl 这样的电台页面时,我得到了错误:

无法获取 /whateverUrl/

我尝试创建类似 /station/whateverURL 的路线并且成功了!但我希望 URL 尽可能短。

我的代码如下:

angular.module("app").config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) 
    var apiVersion = "/api/v2/";

    $routeProvider.when("/", 
        templateUrl: "/static/app/view/home.html",
        controller: "HomeController",
        resolve: 
            userData: function(commonService) 
                return commonService.get(apiVersion + "users/");
            
        
    ).when("/home/", 
        templateUrl: "/static/app/view/home.html",
        controller: "HomeController",
        resolve: 
            userData: function(commonService) 
                return commonService.get(apiVersion + "users/");
            
        
    ).when("/about/", 
         templateUrl: "/static/app/view/about.html"
    ).when("/:stationId/", 
        templateUrl: "/static/app/view/station.html",
        controller: "StationController",
        resolve: 
            stationData: function(commonService, $route) 
                return commonService.get(apiVersion + "stations/" + $route.current.params.stationId + "/");
        
    );

    $locationProvider.html5Mode(
        enabled: true,
        requireBase: false
    );
]);

【问题讨论】:

【参考方案1】:

这里的问题与您的前端无关,而是与后端有关。

Angular 将在服务器发送文件并由浏览器处理后启动,但现在当您在 /whateverUrl/ 请求资源时,您的服务器不知道如何处理它并以 404 和标准 404 响应消息。

根据您发布的错误:

Cannot GET /whateverUrl/

我想我可以假设您在后端有一个 Node/Express 服务器。

你只需要添加一个为你所有的 url 提供 index.html 的中间件。

var express = require('express');
var app = express();

app
    .route('/*')
    .get(function (req, res) 
        res.sendFile("index.html")
    );

基于下面的 cmets,后端服务器是基于 django 的,并且需要一些修复的 imo。我没有删除答案,但显然我发布的内容并不能解决问题。

【讨论】:

我正在使用 django 并且后端是正确的。本地运行时一切正常 好的,检查后端是否存在问题的最佳方法是检查源代码打开 view-source:mysite.com/whateverUrl/ 如果您看到“Cannot GET /whateverUrl/”,那么如果您看到它就是您的后端一些html然后它的角度 当我打开 mysite.com/whateverUrl/ 时,我得到一个空白页,无法获取 /whateverUrl/。现在我将所有内容都设置在 mysite.com/w/whateverUrl 之类的路由中并且可以正常工作,但正如我所说,我希望 URL 尽可能短。 我认为是后端控制器/动作导致了您的问题,我在 django 方面没有任何经验,所以我无法为您提供帮助。也许你可以在这个问题上添加一个 django 标签或开始一个新的。

以上是关于ngRoute 动态 url 作为路径的第一部分的主要内容,如果未能解决你的问题,请参考以下文章

C++探索之旅第一部分第九课:数组威武,动静合一

Linux探索之旅第一部分第三课:測试并安装Ubuntu

C++探索之旅第二部分第一课:面向对象初探,string的惊天内幕

Linux探索之旅第一部分第四课:磁盘分区,并完毕Ubuntu安装

C++探索之旅第一部分第九课:数组威武,动静合一

C++探索之旅第一部分第八课:传值引用,文件源头