2015-03-19 73 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