2016-07-13 4 views
0

こんにちは、私はノードを使い慣れていて、助けていただければ幸いです。Express Routing:ルータを通過したURLを取得するにはどうすればよいですか?

私はこれらの3つのルートを持っている:

router.get('/user/question', auth, ctrlQuestions.getUserQuestions); 
router.get('/user/question/category/:category', auth, ctrlQuestions.getUserQuestionsByCategory); 
router.get('/user/question/position/:position', auth, ctrlQuestions.getUserQuestionsByPosition); 

は、彼らは基本的に1つのマングースコントローラのバリエーションです。最初の1は、第二のすべてQuestionを取得し、第三行い、フィルタCategoryPosition

I間違った3つの別々のコントローラではなく、私はちょうど1ルータにそれらを組み合わせることができれば、私は不思議でしたか?つまり、入力されたURLを確認する手段がquestion/categoryまたはquestion/positionである場合は、対応するreq.paramsを取得しますか?

getUserQuestionsのためのコントローラは、次のようになります。

module.exports.getUserQuestions = function(req, res) { 
    if (req.payload.email) { 
     User 
     .findOne({"email" : req.payload.email}) 
     .populate({ 
      /////// There will be a match option here for filtering 
      path : 'questions', 
     }) 
     .exec(function(err, user){ 
      if (err) return sendJSONresponse(res, 404, err); 
      if (user.length == 0) return sendJSONresponse(res, 404, {"message" : "no user found"}); 
      sendJSONresponse(res, 200, user.questions); 
     }) 
    } else { 
     return sendJSONresponse(res, 404, {"message" : "invalid user email"}) 
    } 
} 
+0

あなたはまだ何を正確に一つのルータ上でそれらを配置しています質問ですか? – peteb

答えて

0

要求されたURLがreq.baseUrlに保存されます。ですから、一方のコントローラ内のすべてのデータを処理したい場合は、単にアンTOUT CAS C'ESTプラス容易なドールのutiliserの貴様のルート

if('/user/question/category' == req.baseUrl) { 
    //... 
} 

を試してみてください;)

+0

Merci mille fois。しかし、なぜ異なるルートを使用する方が簡単でしょうか?私はほぼ同じに見える3つのコントローラを使用する異なるURLでdbを呼び出すことができるようにしたい。 – dedalux

+0

私の意見では、もっと冗長ではるかにスケーラブルです。場合によっては、アプリケーション全体がシンプルでわかりやすいものもありますが、他の人があなたが達成したいことを理解するために余分な時間を費やすこともあります。 DRY原理は本当に重要ですが、KISSについても忘れてはいけません。同じように、CouchDBを見てください。たぶんそれはあなたを助けるでしょう。 –

+0

ありがとう、私はそれを念頭に置いておきます!今はプロトタイプを構築しようとしていますが、別々のコントローラを構築することになりました:) – dedalux

関連する問題