2013-03-04 70 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

回答