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

时间:2015-03-19 07:35:08

标签: javascript angularjs node.js express angularjs-routing

我在服务器上使用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 static:

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

如果调用直接通过此链接,如何使服务器重定向其路径上相对于根的所有静态页面。

例如: server:3000/field1/23必须致电server:3000/client/index.html 和索引必须像server:3000/js/cntr1.js

一样上传JS

更新:我找到了问题的解决方案。但它看起来像一个拐杖丑陋

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

也许有更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

在expressjs中,您可以使用正则表达式模式匹配来定义路径。这意味着,特定集合下的任何内容都将始终从服务器端返回相同的页面,您将让角度决定要显示的内容或执行哪些操作。

将所有内容重定向到同一页面并不是一个好主意,因为您需要管理资产,它们也存在于/ part上,而不是使用易于管理的子目录的好主意

以下代码段会将应用路径下的所有内容重定向到服务器端的同一页面

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

如果你不想被限制在一个app dir,而你有许多不同的根级目录,所有这些都需要指向同一个页面,你可以做这样的事情

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