【问题标题】:Express Routing: How to get the URL that passed the router?快速路由:如何获取通过路由器的 URL?
【发布时间】:2016-11-16 11:55:53
【问题描述】:

您好,我是 node 新手,不胜感激。

我有这 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);

它们基本上是一种猫鼬控制器的变体。第一个得到所有Question,第二个和第三个得到并通过CategoryPosition过滤

我错了 3 个独立的控制器,但我想知道是否可以将它们组合成一个路由器?即有没有办法检查输入的URL来自question/categoryquestion/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"})
    }
}

【问题讨论】:

  • 您已经将它们放在一台路由器上,那么问题到底是什么?

标签: express mongoose routing


【解决方案1】:

请求的 URL 保存在 req.baseUrl 中。因此,如果您想在一个控制器中处理所有数据,请尝试

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

En tout cas c'est plus facile d'utiliser différents ;)

【讨论】:

  • 谢谢你。但是为什么使用不同的路线会更容易呢?我希望能够使用不同的 url 调用数据库,这些 url 使用 3 个看起来几乎相同的控制器。
  • 在我看来,它更冗长且更具可扩展性。有时,整个应用程序对您来说简单明了,但其他人可能会花费额外的时间来弄清楚您想要实现的目标。 DRY 原则非常重要,但我们也不应忘记 KISS。同样的方式,看看 CouchDB,也许它会对你有所帮助。
  • 谢谢,我会记住的!现在我只是想构建一个原型,但我最终构建了单独的控制器:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 2018-09-27
  • 1970-01-01
  • 2018-04-04
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多