2015-03-19 102 views
1

我使用在客户端的NodeJS在服务器+ expressJS和AngularJSAngularJS路由服务器端支持(的NodeJS +快递)

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')); 

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

例如: server:3000/field1/23必须调用server:3000/client/index.html 和索引必须上传JS喜欢server:3000/js/cntr1.js

UPD:我发现了一个解决问题的办法。但它看起来很丑陋作为一个拐杖

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

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

回答

1

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

它不是一个好主意,因为你需要管理你的资产重定向的一切/到同一个网页,让他们在/一部分而存在过,而不是它使用一个子目录这是很容易一个好主意,管理

下面的代码片段将应用程序路径下的一切重定向到同一页上的服务器端

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

,如果你不想被限制在一个应用程序目录做什么,而不是你有许多不同的根级别迪尔斯的,所有的需要指向同一页面,你可以做这样的事情

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

'app.get('/ field /:name',function(req,res){' 'var name = req.params.name;' 'res.render('/'+ name); ' '});'但是:名称可以是一个ID。我找到了通用解决方案。我认为这是在REST应用程序中传播的问题 – Gopard 2015-03-19 07:48:04

+0

在这个你的评论代码中,你想要做什么?你想喜欢'http:// server:3000/name'吗?但是这个页面将包含哪个视图? – 2015-03-19 09:06:42

+0

是的。当name ='index.html'或'controll.js'...时,我想要'http:// server:3000/name',但它可以是'23'(角度页参数),然后是'http://server:3000/field/2' ='http:// server:3000/field' ='http:// server:3000 /' – Gopard 2015-03-19 09:19:28

相关问题