如何让Express路由与HTML5样式URL的角度路由一起工作?

如何让Express路由与HTML5样式URL的角度路由一起工作?,html,url,express,angularjs,url-routing,Html,Url,Express,Angularjs,Url Routing,我想制作一个带有HTML5风格URL的AngularJS应用程序(即URL中没有片段)。因此,在Angular应用程序的路由控制器模块中,我有如下内容: angular.module('app').config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) { $locationProvider.html5Mode(true) ... } $routeProvider .

我想制作一个带有HTML5风格URL的AngularJS应用程序(即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*/);
许多工作示例,如不要使用HTML5模式。对于像
http://localhost:3005/#/1/foo
,很明显

  • http://localhost:3005/
    部件由Express在服务器端处理。Express很高兴地为我们的网站服务
    index.html
  • /1/foo
    路由由Angular的路由器在客户端处理
假设我们的
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模式,我们的URL
http://localhost:3005/#/1/foo
变为
http://localhost:3005/1/foo
(不再散列
#
)。这一次,整个URL被Express截取,它变得混乱,因为我们没有定义除
/
之外的路由


我们真正想说的是,URL的后半部分(
/1/foo
)应该“委托”给Angular进行处理。我们怎么能这么说呢?

似乎它都可以工作。但是,我自己没有做这项工作。我依赖于这个框架项目:


这允许您在一定程度上控制客户端处理哪些路径,服务器处理哪些路径。

我不是Express用户,但这个问题应该与任何角度的后端有关。如果您只是指示Express将所有内容路由到root()您应该打开Angular前端,Angular应该从中选择相对路径并确定要打开的客户端路由。因此,如果用户请求,您的Express应该像收到请求一样提供HTML。此时,一旦您提供的HTML加载Angular,Angular应该选择当前位置并确定是什么位置ich客户端视图/ctrl打开。您找到解决方案了吗?