【问题标题】:Can i use multiple get request with same path and different parameter names?我可以使用具有相同路径和不同参数名称的多个获取请求吗?
【发布时间】:2020-12-26 05:57:51
【问题描述】:

我想知道是否可以有多个具有相同路径但参数名称不同的 get 请求?

它们会互相覆盖吗? 还是我应该以不同的方式组织我的路径?

router.get('/:id', functionA);
router.get('/:username', functionB);

functionA(id) {
    // return orders by id;
}

functionB(username) {
    // return orders by username
}

【问题讨论】:

    标签: javascript node.js express get request


    【解决方案1】:

    尝试同时使用这两种方法会发生冲突:

    router.get('/:id', functionA);
    router.get('/:username', functionB);
    

    由于请求按照声明的顺序匹配,并且这两个路由都匹配每个顶级 URL,因此该路由的每个传入请求都将匹配第一个请求,并且它将处理所有请求。只有在 functionA 中使用某种算法来确定哪些实际请求属于它,然后对不属于 functionA 的请求调用 next()functionB 才会被调用。

    而且,即使您找到了一种使用上述逻辑来完成这项工作的方法,但这也不是设计事物的好方法。您应该从 URL 的结构中明确给定 URL 的请求处理程序。

    我不知道您的应用程序的整体结构或您的整体 URL 设计,但在此路由器级别,这样的内容会更清晰且没有冲突:

    router.get('/id/:id', functionA);
    router.get('/user/:username', functionB);
    

    【讨论】:

    • 但是我可以有不同类型的请求方法和不同的参数名称,对吧?
    • @AhmetK - 是的,不同的方法是分开匹配的,所以它们不会冲突。所以app.get("/:id", ...)app.post("/:whatever", ...) 不会冲突。确保您使用适合该操作类型的方法,而不仅仅是扭曲用于解决此问题的方法。
    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多