2016-09-14 42 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它重新加載頁面,而不是隻加載控制器+模板。 –