2016-09-14 43 views
0

我有一个奇怪的问题与UI路由器和Express交互在一起。 我到处寻找解决方案,但似乎没有完全解决问题的工作。UI路由器+节点/快速JS页面不需要地重新加载

当我的应用程序在我的/公共文件夹中,当我导航到/它工作正常,并且URL正在改变,因为我点击links.But每当我直接去/随机/路径(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' 
      }); 
    }); 

我也试着与两个基本URL和/ <base href="/index.html">

+0

你能否包含你的UI路由器配置?我怀疑你可能想要添加其他条款。 –

+0

完成了希望它有帮助 –

回答

0

好了,所以不存在你的路线的NodeJS是因为你的路线。 它适用于/,因为它认为它是/public/index.html
如果您然后尝试并加载/post/new,它会寻找/public/post/new/index.html - 并且找不到它。 下面的修复程序应该适合你。

app.use(function (req, res) { 
    res.sendFile(__dirname + '/public/index.html'); 
}); 

然后,你需要一个稍微单独的方式来提供你的模板 - 基本上是静态文件!我个人建议你使用一个简单的模板文件夹,如下所示。确保这是以上的您的全部路线上面。

app.use('/templates', express.static('/public/templates')); 

哦,终于 - 你会希望你的<base>标记设置为/

+0

所有这些都已经完成了:( –

+0

)你需要将所有的部分放在一起 - 如果你只有一个完成了,它仍然会中断,特别是,如果你没有_either_你的基本HTML文件或模板无法正确加载,这会导致你的重装问题。 –

+0

我缺少什么部分?不清楚,我有三个部分,但我可能会丢失重要的东西。我有基础href,模板等。一切 它只是当点击通过ui-sref时,整个页面将重新加载(在某些情况下),但仍然适用于正确的路线。直接在任何路线指向浏览器已经工作,只是当点击trhought ui- sref它重新加载页面,而不是只加载控制器+模板。 –