我在前端使用角度ui-router并将html5Mode设置为true:
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
function($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
.state('app', {
url: '/',
views: {
'content': {
templateUrl : 'static/templates/landing.html',
},
}
})
.state('app.home', {
url: 'home/:username',
views: {
'content@': {
templateUrl : 'static/templates/home.html',
controller : 'HomeController',
}
}
})
.state('app.help', {
url: 'help',
views: {
'content@': {
templateUrl : 'static/templates/help.html',
}
}
});
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
}])
然后在后端我将Express设置为捕获所有页面请求:
app.use('/', require('./controllers/static'));
./ controllers / static.js看起来像这样:
router.use('/static', express.static(__dirname + '/../../public');
router.get('/*', function(req, res) {
res.sendFile('public/layouts/index.html');
});
这些工作适用于一级深度的页面,例如,我可以刷新localhost:3000 / help,但是,它不适用于深度超过一级的页面,刷新 localhost:3000 / home / myuser 将失败并显示如下错误:
Resource interpreted as Stylesheet but transferred with MIME type text/html:
有谁知道我需要做什么才能让刷新工作在所有路线上?我试过router.get('*'),但它也不起作用。
当我转向html5Mode时它工作正常。
使用的Express版本是4.13.3