Node.js 如何使用不同查询参数的同一路由

Node.js 如何使用不同查询参数的同一路由,node.js,express,Node.js,Express,我有两个冲突的端点: 接电话?状态=可用;及 接电话?状态=可用&最低价格=价值&最高价格=价值 我的路线是: app.get('/phone', getAvailablePhones); app.get('/phone', getAvailablePhonesbyPrice); 只执行第1个路由 如何为两个端点使用此路由 有几种方法可以做到这一点,最简单的方法是,在设置了min/max的情况下,在两个函数的第一个函数中调用next() const getAvailablePhone

我有两个冲突的端点:

接电话?状态=可用;及

接电话?状态=可用&最低价格=价值&最高价格=价值

我的路线是:

app.get('/phone', getAvailablePhones);

app.get('/phone', getAvailablePhonesbyPrice);
只执行第1个路由


如何为两个端点使用此路由

有几种方法可以做到这一点,最简单的方法是,在设置了min/max的情况下,在两个函数的第一个函数中调用next()

    const getAvailablePhones = (req, res, next) => {
        if (req.query.min_price || req.query.min_price) return next();
        //rest of your code
    }
如果调用next(),Express将尝试下一个匹配的函数

编辑以了解更多上下文: 请参阅路由文档。在这个用例中,我将使用params

    app.get("phone/:status/:min_price/:max_price", 
    getAvailablePhonesByPrice);
    app.get("phone/:status", getAvailablePhones);

这样你的路线就不会重叠,它们是独一无二的

您不能有两个同名参数的端点

查询参数位于
req.query
对象中。您可以使用此对象在
getAvailablePhones
方法中过滤手机

例如,如果参数是
min
max
,则可以通过以下方式获得这两个值:

const{min,max}=req.query


并使用这两种方法来过滤搜索

不可能,您必须更改路线名称。有什么问题吗?只需检查存在哪些查询参数并采取相应的行动。这里的方法是正确的,是解决问题的完全有效的方法,但是不能有两个同名的端点。是的,确实可以。如果指定不同的参数,我将更新我的答案,谢谢,甚至不需要不同的参数。在app.use(function(req,res,next))或app.use(“/”,function(req,res,next))中包含中间件是一种非常常见的模式,只要您没有两个函数发送响应,并且前面的函数都调用next(),您可以随时使用相同的命名路由。