当使用html5Mode(true)时,如何在ExpressJS中设置路由以捕获所有深层路由

时间:2016-07-09 15:48:39

标签: javascript angularjs express

我在前端使用角度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

0 个答案:

没有答案