在Express通话中定义查询

时间:2018-07-25 21:05:11

标签: node.js express

我知道如何在路线中定义参数

app.get('/:someParams', () => {})

如何在路由中明确定义查询?例如添加“?someQuery”, 根据需要进行查询

3 个答案:

答案 0 :(得分:1)

Express.js在匹配路由时跳过查询字符串。如果您想对网址进行更精细的定义以与某些可变参数匹配,则可以定义一个端点,例如:

app.get('/api/library/:foo/book/:bar', () => {
  const { foo, bar } = req.params;
  ...
});

这可能等效于由/api?library=1&book=2构成的路由,但是可以与查询字符串一起使用,而可以使用查询参数,这将导致以下路由:/api/library/1/book/2

答案 1 :(得分:1)

简而言之:你不能。

对于路由匹配,Express使用模块path-to-regexp,该模块不支持URL查询的匹配。您必须在路线的处理程序中进行检查:

app.get('/home', (req, res, next) => {
  if (req.query.foo) {
    handleFooRequest(req, res, next);
  } else {
    handleBarRequest(req, res, next);
  }
});

答案 2 :(得分:1)

您可以使用req.params来代替调用req.query来获取请求参数的值。这将使您能够 根据传递的查询字符串过滤数据。在Express中,查询参数基于键值对,该键值对取决于 有关如何构造数据层的信息。

例如,如果您有一个带有端点/products的REST API,并且数据以以下形式存储:

{
    name: "PRODUCT NAME"
    brand: "PRODUCT BRAND"
    price: "PRICE"
    ...
}

然后,您可以执行类似/products?brand=apple的操作,只退回苹果产品。显然,在处理/products路由的Express方法中,您将具有根据传递的键进行过滤的逻辑。

可以找到更深入的探索方法here

希望有帮助