繁体   English   中英

$ locationProvider html5mode刷新时导致“无法获取”错误-AngularJS Node应用

[英]$locationProvider html5mode causing “cannot GET” error on refresh - AngularJS Node app

我正在尝试使用locationProvider从Angularjs应用程序的URL中删除主题标签,并且在我手动刷新页面之前,它可以很好地工作。 这总是在浏览器中导致“无法获取..”错误。 我进行了一些研究,我认为我必须使用.htaccess文件进行重定向,但是我不确定如何实现它,因此我在网上搜索了解决方案,但到目前为止还没有成功。

这是我的app.js,用于处理到Angular视图和控制器的路由:

(function () {
    'use strict';
    var myApp = angular.module('myApp', ['ngRoute']);
    myApp.config(function($routeProvider, $locationProvider) {
        $routeProvider.
            when('/', { 
                templateUrl: 'views/partials/play.html',
                controller: 'playCtrl'
            }).
            when('/dictionary', {
                templateUrl: 'views/partials/dictionary.html', 
                controller: 'dictionaryCtrl'
            }).
            when('/add', {
                templateUrl: 'views/partials/word.html', 
                controller: 'wordCtrl'
            }).
            when('/about', {
                templateUrl: 'views/partials/about.html', 
                controller: 'aboutCtrl'
            }).

            otherwise({redirectTo: '/'});

        // use the HTML5 History API
        $locationProvider.html5Mode(true);
    });
})();

我也将它添加到了index.html的<head>内:

<base href="/">

如果有帮助,则使用Node.js,Express,Angular和Mongodb构建该应用程序。

非常感谢。

如果有人想知道您是否需要将Node未使用的所有路由重定向到Angular:

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

这必须在server.js中完成。 不要忘了在sendfile链接中使用./ :)

它取决于Angular版本。

最新的Angular版本需要以下选项:

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

如果将$ location配置为使用html5Mode(history.pushState),则需要为应用程序指定带有标记的基本URL,或通过将带有requireBase:false的定义对象传递给$ locationProvider来将$ locationProvider配置为不需要基本标记$locationProvider.html5Mode()

官方文档中的模式详细信息在这里

因此,您需要做的是在服务器端处理您在angular中描述的每条路由,并插入angular呈现相同的页面(可能是索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM