我想用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進行處理。我們怎麼說這個?
我不是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
您是否找到解決方案? – 2013-04-13 11:46:00