我正在使用AngularJS ui路由进行路由我想删除#(来自URL的哈希)。我正在使用此代码并在index.html文件中使用(base href =" /")。它工作正常,但当我像(http://0.0.0.0:3000/athletepersonalinfo
)刷新页面时,它给了我一个错误。
.config(function($stateProvider,$locationProvider) {
$locationProvider.html5Mode({ enabled: true, requireBase: false })
$stateProvider
.state('/', {
url: '',
templateUrl:HTML.HOME,
controller: 'homeController as home'
})
.state('home', {
url: '/',
controller: 'homeController as home',
templateUrl: HTML.HOME
})
.state('athletepersonalinfo', {
url: '/athletepersonalinfo',
controller: 'athleteProfileInfo',
templateUrl: HTML.ATHLETE_PERSONAL_INFO,
authenticate: true
})
答案 0 :(得分:1)
当您点击刷新时,服务器实际上会尝试查找是否已定义给定路由/athletepersonalinfo
。要从网址中实际删除#,您必须添加get(/*)
路由,该路由始终会返回您的index.html
页面。这条路线应该在所有其他路线之后。现在这意味着只要没有定义路由,你的index.html
将被提供,而不是在客户端,angular将处理要加载的视图。制作这样的chages时几点注意事项
由于任何未解决的get都可以返回index.html,请确保您的路由有意义,例如所有资源都以/ assets / path开头,所有api调用都以/ api /开头。
这样做的好处是,如果您在某些资产上获得404或api通话,您仍会得到index.html
这是错误的。但是使用这种方法,你需要做的就是设置一个像这样的路线
app.get('/:url(api|assets)/*',function(req,res){
res.status(400).send("Not Found")
});
app.get('/*',function(req,res){
res.sendFile('index.html');
});
确保在所有其他路线之后定义*路线,否则您将为每个请求获取index.html。
希望这有帮助。