![](/img/trans.png)
[英]Angular $locationProvider html5Mode / <base> error
[英]$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.