UI路由器+节点/快速JS页面重新加载不必要

时间:2016-09-14 16:59:06

标签: angularjs node.js express

我有一个奇怪的问题,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">

1 个答案:

答案 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>代码设置为/