我知道如何在路线中定义参数
app.get('/:someParams', () => {})
如何在路由中明确定义查询?例如添加“?someQuery”, 根据需要进行查询
答案 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。
希望有帮助