【问题标题】:Parsing query string in Node to allow logical operators在 Node 中解析查询字符串以允许逻辑运算符
【发布时间】:2017-12-20 20:32:57
【问题描述】:

我想要类似于 node-odata 提供的东西,但我不想将它包裹在我的数据库中(我正在使用 Cassandra,并且已经有一个 Express 应用程序设置了路线等)。

目前,我从数据库中获取数据(最终将返回一个 JSON 对象给用户),然后使用查询字符串中传递的值,我使用 JavaScript 修改结果并将修改后的 JSON 对象传递给用户.

我不能传入像 http://localhost:3001/getSomeData?name=jim&age=21||eyeColor=red 这样的查询字符串,它在查询字符串中包含逻辑运算符,并且会抓取所有数据并过滤名称为“jim”、年龄为“21”或 eyeColor 为“红色的”。因此,这将给我所有眼睛颜色为红色和/或年龄为 21 岁的吉姆。如果我使用这个 age=21&&eyeColor=red,我希望得到所有眼睛颜色均为红色且年龄为 21 岁的吉姆。

我正在考虑使用可以传入的自定义查询字符串(即inclusive=age&inclusive=eyeColor 附加在查询字符串的末尾),在 Node 中,我会修改过滤结果以处理这些属性(ageeyeColor) 就好像它们是通过 || OR 运算符传入的一样)。但是,这非常冗长,我希望有一个库或其他更简单的实现可以解决这个问题,或者以某种方式让我将简单的逻辑运算符传递到查询字符串中。

【问题讨论】:

  • 您所犯的错误是试图更改查询字符串的工作方式。相反,在查询字符串中传递您想要解析的值,例如?query=name%3Djim%26age%3D21%7C%7CeyeColor%3Dred,然后您可以访问该值并自行解析它。
  • @zzzzBov 好的,有道理,感谢您的回复!您是否碰巧知道一个可以解析和过滤类似字符串的库(我找不到)。否则,我将按照您的建议编写自己的逻辑来处理查询字符串。

标签: json node.js express query-string querystringparameter


【解决方案1】:

我最终使用这个库来实现我想要的:https://www.npmjs.com/package/jspath

这是很好的文档,非常适合我的情况。

【讨论】:

    【解决方案2】:
    npm i querystringify  //or
    https://cdnjs.cloudflare.com/ajax/libs/qs/6.7.0/qs.min.js
    
    
    //it will will return an object
    const myObject = Qs.parse(location.search, {ignoreQueryPrefix: true}); 
    //you can use object destructuring.
    const {age,eyeColor}=Qs.parse(location.search, {ignoreQueryPrefix: true})
    

    默认情况下,解析将包括“?”也。

    {ignoreQueryPrefix: true} 这个选项会省略“?”。

    【讨论】:

    • 嘿@Yilmaz,感谢您的回复。一年多前我写这个问题时忘记更新这个问题。我找到了一个合适的 NPM 包,请看我接受的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2015-02-06
    • 2014-09-02
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多