我有一个奇怪的问题,UI路由器和Express交互在一起。 我到处寻找解决方案,但似乎没有什么能完全解决这个问题。
当我的应用程序位于我的/公共文件夹中时,当我导航到/它工作正常并且当我点击链接时,网址会发生变化。但每当我直接转到/ random / path(ui-sref="post/new">
)时,它被nodejs拦截并说这条路线不存在。
我已经使用该问题的主题解决了该问题:
app.use('/', express.static(__dirname + '/public'));
app.use(function (req, res) {
res.sendFile(__dirname + '/public/');
});
现在一切都正常,只要我直接导航到我想要的路径。
现在有一个新问题,整个页面将在每次路径更改时重新加载,而不仅仅是像客户端应用程序一样,只需加载视图+控制器。
奇怪的是,它正在按预期工作2或3路。
有人可以帮忙吗?
编辑:
angular.module('App').config(function($stateProvider, $locationProvider,$urlRouterProvider) {
$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('/');
$stateProvider
.state('posts-new', {
url:'/post/new',
templateUrl: 'tmpl1.html'
})
.state('posts', {
url:'/posts',
templateUrl: 'tmpl2.html'
});
});
我也尝试了基本网址/和<base href="/index.html">
答案 0 :(得分:0)
好吧,因此您的NodeJS路线不存在是因为您的路线。
它适用于/
,因为它将其解释为/public/index.html
如果您尝试加载/post/new
,则会查找/public/post/new/index.html
- 但找不到它。
下面的修复应该对你有用。
app.use(function (req, res) {
res.sendFile(__dirname + '/public/index.html');
});
然后,您需要一种稍微单独的方式来提供模板 - 基本上就像静态文件一样!我个人建议你使用一个简单的文件夹来模板,如下所示。确保这是 上面的catchall路线。
app.use('/templates', express.static('/public/templates'));
哦,最后 - 您希望将<base>
代码设置为/
。