基本标记打破Angular HTML5模式中的脚本链接

时间:2017-03-09 19:08:04

标签: angularjs html5 express

问题

在HTML5模式下设置基本代码以运行Angular 1.x后,浏览器(Chrome)会在访问应用时通过直接导航到localhost:3000/resource/id向脚本发出错误的路径请求。

详情

我有一个Angular 1应用程序,我最近设置为在HTML5模式下运行,如下所示:

    $locationProvider.html5Mode(true);

我在index.html的头部包含了一个基本标记,如下所示:

<base href="/">

我已经设置了快速路由,以便(例如)http://localhost:3000/album/38ad87f的请求将返回index.html,如下所示:

    .use('/', express.static(__dirname + '/crate-frontend/app'))

// Playlist endpoints
.use('/api/playlists', playlistRoutes)

// Album endpoints
.use('/api/album', albumRoutes)

// Artist endpoints
.use('/api/artist', artistRoutes)

// Track endpoints
.use('/api/tracks', trackRoutes)

// User endpoints
.use('/api/user', userRoutes)

// Discogs proxy endpoints
.use('/api/discogs', discogsRoutes)

// Youtube proxy endpoints
.use('/api/youtube', youtubeRoutes)

// Search endpoints
.use('/api/search', searchRoutes)

// For serving up crate-frontend/app/index.html
.all('/*', function(request, response){
    response.sendFile(__dirname + '/crate-frontend/app/index.html' );
})

现在,当我进入主页并导航时,一切正常。但是,如果我刷新不是根目录的页面或将http://localhost:3000/album/38ad87f之类的URL复制/粘贴到新窗口中,它就会中断。我可以看到它接收index.html,但是当浏览器请求每个链接脚本时,例如:

<script src="app.js"></script>

它实际向http://localhost:3000/album/app.js发出请求,返回index.html。

有人可以告诉我我错过了什么/做错了吗?

1 个答案:

答案 0 :(得分:0)

尝试使用绝对路径包含您的资源,您将一直很好。

<script src="/app.js"></script>