【问题标题】:Is there a way to pass gte, lte etc in the URL query string?有没有办法在 URL 查询字符串中传递 gte、lte 等?
【发布时间】:2022-01-04 15:59:29
【问题描述】:

使用Node/Express/Mongoose,有没有办法在url参数中传递$gte、$lte之类的查询?

我正在开发一个仪表板工具,它必须有大约 40 个不同的查询选项(一次最多可选择 6 个),可以任意组合,我正在尝试找到一种方法来传递这些选项URL 而不是控制器。查询选项太多,在控制器中使用像age: { $gt: 17, $lt: 66 } 这样的标准是不现实的。如果我可以传递?age={$gte: 18, $lte: 24} 之类的内容并返回该范围,那么我就可以正确返回数据。使用控制器的部分问题在于没有标准的对象结构。

提前谢谢你。

【问题讨论】:

  • 使用 express req.query 属性。然后你可以像这样传递查询参数:<host>/api/endpoint?gt=17&lt=66
  • 我正在使用 req.query,但在上面的示例中,我需要能够获得年龄范围。您的示例没有获取年龄范围,而只是两个查询。我很感激你的回复。希望我已经澄清了一点。
  • 只需在 2 个变量中创建范围 let age = {$gt: req.query.gt, $lt: req.query.lt}。我不明白你的问题。
  • 感谢您的澄清,我想有 50 个查询选项涵盖大约 1,000 个字段,这让我很头疼。

标签: node.js express mongoose req.query


【解决方案1】:

我认为在查询字符串 (url) 中传递过滤器不是一个好主意。此类数据应通过 POST 请求在请求正文中传递。这样,您可以根据需要传递完整的对象,也可以传递所需的字符,其中一些在传递 url 查询字符串时可能会导致问题。请求正文中的示例请求可以是-

{
    "age": {
        "$gt": 17,
        "$lt": 66
    }
}

但如果你想在 url 中传递数据,那么你可以执行以下操作 -

使用 js 函数 encodeURIComponent(uri) 对 URL 进行编码,您可以在其中传递完整的 uri。这将对特殊字符进行编码。示例 -

let uri = "age={$gte: 18, $lte: 24}";
let encoded = encodeURIComponent(uri);

此处编码将返回类似 - age%3D%7B%24gte%3A%2018%2C%20%24lte%3A%2024%7D 的内容,然后您可以在 ? 之后传入 url,然后在服务器端代码上解码以获取参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多