2017-09-29 67 views
0

今天我在這裏不只是檢查好的答案,但問! 我想要做的使用Sails.js及其routes.js如下:Sails.js自定義路由與相同的控制器,但不同的佈局

My problem picture

我想是基於已登錄用戶的類型實際上提供不同的佈局,我知道如何做到這一點,但我不想寫這篇文章的routes.js文件(因爲它是凌亂的,我不希望創建控制器做路由本身的工作):

'get /adminSpace/*' : { 
    controller : 'adminSpace' //setting layout on controller 
}, 
'get /userSpace/*' : { 
    controller : 'userSpace' // //setting layout on controller 
} 

的快速方法,如果可能的話,會這樣寫:

'get /[user|admin]/projects/*' : { 
    controller : 'project' 
    locals: { 
     layout: 'based_on_url' 
}} 

這是可能的嗎?

+0

只是要清楚,我不想添加中間人式的AdminSpaceController和UserSpaceController來設置佈局!然後專門爲每個角色分配每個控制器url。有小費嗎? – paulogdm

+0

風帆路線可以做一些非常棘手的東西:http://sailsjs.com/documentation/concepts/routes/custom-routes但我的直覺告訴我,爲什麼不用你的控制器?我不確定在路線文件中設置的本地人是否可以訪問從路線本身或其他動態數據中抽取的通配符(如[user | admin]等)。 – arbuthnott

+0

我也覺得兩條路線可能會更簡單!其他開發人員在查看代碼時可以更快地理解兩條路線,而不必解開用於將正則表達式放入路線的有趣語法。 – arbuthnott

回答

0

好吧,我想我正在閱讀你想要的基於評論 - 你想爲正常和管理員用戶的不同行爲。您的代碼可以在您的routes.js文件和views文件中處理,但您希望管理員忽略差異 - 他們可以做到這一點,而不必檢測「管理員vs正常」。

你可以做到這一點通過在指向同一個控制器的兩個不同的路線設置當地人:在您的UserController

'GET /adminSpace/*' : { 
    controller : 'UserController', 
    locals: { 
     admin: true, 
     _layoutFile: 'admin' 
    } 
}, 
'GET /userSpace/*' : { 
    controller : 'UserController', // same as above 
    locals: { 
     admin: false, 
     _layoutFile: 'user' 
    } 
}, 

然後:

someAction: function(req, res) { 
    // any logic needed 
    // can access sails.locals.admin if necessary, but do not have to 
    return res.view(); // will use admin.ejs or users.ejs as set in route 
} 

在您看來,在路由設置當地人仍然可以訪問,並且如果需要,您可以在控制器中添加額外的本地人員。希望這是你正在尋找的!

+0

我可以與之合作。謝謝! – paulogdm

相關問題