AngularJS路由服务器端支持(NodeJS + express)

我在服务器上使用NodeJS + expressJS,在客户端上使用AngularJS

AngularJS控制器有以下路线:

app.config(function($routeProvider,$locationProvider) { $routeProvider .when('/field1/:id', { controller: 'ctrl1', templateUrl: "/view/mainpages/field1.html" }) .when('/field2/:id', { controller: 'ctrl2', templateUrl: "/view/mainpages/field2.html" }) ........... many many .when('/', { controller: 'ctrl0', templateUrl: "/view/mainpages/index.html" }) .otherwise({redirectTo : '/'}); 

NodeJS静态:

 app.all('/*', express.static(__dirname + '/client')); 

如何使服务器redirect他们的path上的所有静态页面相对于根,在这种情况下,直接通过这个链接的调用。

例如: server:3000/field1/23必须调用server:3000/client/index.html并且索引必须上传JS,例如server:3000/js/cntr1.js

更新:我find了解决问题的办法。 但它看起来丑陋的拐杖

 app.get('/field1/([0-9]+$)', function(req, res, next) { req.url='/index.html'; next(); }); app.use('/field1', express.static(__dirname + '/client')); 

也许有一个更优雅的解决scheme?

在expressjs中,可以使用正则expression式模式匹配来定义路由。 这意味着,在特定集合下的任何东西将始终从服务器端返回相同的页面,并且您将决定究竟要显示什么内容或执行哪个操作。

将所有内容redirect到同一页面并不是一个好主意,因为您需要pipe理您的资产,而且它们也存在于/部分,而不是使用易于pipe理的子目录

以下片段将redirect到应用程序path下的所有内容到服务器端的相同页面

 app.get('/app/*', function(req, res) { res.send('app_index'); }) 

如果你不想被限制到一个应用程序目录,而是你有一些不同的根级别的目录,所有这些都需要指向同一个页面,你可以做这样的事情

 app.get('/(app|server|client|form|dashboard)/*', function(req, res) { res.send('app_index'); })