我想用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