2017-09-29 4 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

2つのルートがもっとシンプルになるような気もします!あなたのコードを見ている他の開発者は、正規表現をルートに組み込むために使用される面白い構文を解析するよりも、2つのルートをより迅速に理解することができます。 – arbuthnott

答えて

0

さて、私はあなたがコメントに基づいて欲しいものを読んでいると思います。普通のユーザーと管理者の行動が違うことを欲しがります。 routes.jsファイルとviewsにこれを処理するコードがありますが、コントローラーがその違いを無視するようにしたいと思っています。「admin vs normal」を検出することなく自分のことを行うことができます。

あなたが行うことができ、同じコントローラを指す2つの異なる経路上で地元の人々を設定して:あなたのビューで

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 
} 

、地元の人々はルートに設定します。あなたのUserControllerに続いて

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

引き続きアクセス可能になり、必要に応じてコントローラに余分な地元の人を追加することができます。これがあなたが探していたものだったら幸いです!

+0

私はそれを使用することができます。どうも! – paulogdm

関連する問題