2013-03-04 39 views
4

我想用HTML5樣式的URL製作一個AngularJS應用程序(即URL中沒有#片段)。因此,我的角應用程序的路由控制器模塊中我有類似以下內容:如何讓Express路由與HTML5風格的URL進行Angular路由?

angular.module('app').config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) { 
    $locationProvider.html5Mode(true) 
... 
} 

$routeProvider 
.when('/1/:param', /* do something */) 
.when('/2/:param', /* do something else */) 
.when('/3/:param', /* do something else again*/); 

一些像AngularFun工作示例不使用HTML5模式。對於像http://localhost:3005/#/1/foo的請求,很明顯,

  • http://localhost:3005/部分由快速處理服務器端/。表達高興地服務我們啓用角index.html
  • /1/foo路線由角的路由器來處理客戶端

說我們的server.coffee容貌,作爲標準配置,像下面的(我們所服務的靜態dist目錄包含了我們編,精縮角來源:

express = require 'express' 
routes = require './routes' 
dir = "#{__dirname}/dist"   # sources live here 
port = process.env.PORT ? process.argv.splice(2)[0] ? 3005 
app = express() 

app.configure -> 
    app.use express.logger 'dev' 
    app.use express.bodyParser() 
    app.use express.methodOverride() 
    app.use express.errorHandler() 
    app.use express.static dir  # serve the dist directory 
    app.use app.router 
    routes app, dir     # extra custom routes 

如果我們確實使用了HTML5模式,我們的網址http://localhost:3005/#/1/foo成爲http://localhost:3005/1/foo(沒有更多的哈希#)這一次,整個URL是我由Express進行中斷,並且由於我們沒有定義除/以外的路由而感到困惑。

我們真正想說的是URL的後面部分(/1/foo)應該被授權給Angular進行處理。我們怎麼說這個?

+2

我不是Express用戶,但這個問題應該與任何Angular後端相關。如果您只是指示您的Express將所有內容路由到根目錄(http:// localhost:3005),您應該打開您的Angular前端,然後Angular應該拿起相對路徑並找出要打開的客戶端路徑。因此,如果用戶請求http:// localhost:3005/1/foo,則您的Express應該爲HTML提供服務,就好像它收到了http:// localhost:3005 /的請求。在這一點上,一旦你的服務HTML加載Angular,Angular應該拿起當前的位置並找出打開哪個客戶端視圖/ ctrl。 – Stewie 2013-03-04 18:41:12

+0

您是否找到解決方案? – 2013-04-13 11:46:00

回答