分配变量后对象行为发生了变化

时间:2018-08-24 06:55:43

标签: javascript node.js object

我已经通过API从客户端收到了一个查询/参数(matchQuery)。  当我在服务器端控制台此 request.query.matchQuery 。时,它会给我 {“ count”:{“ $ gt”:1}} ,这对我有好处

当我在另一个这样的变量上分配此参数时

var aggregateQuery = {
             $match: request.query.matchQuery
 }

现在我控制台 aggregateQuery 其返回值

  

{'$ match':'{“ count”:{“ $ gt”:1}}'}

其行为得到改变。但是我不想在单引号的右边 一侧。

输出

  

{'$ match':{“ count”:{“ $ gt”:1}}}

     

OR

     

{$ match:{“ count”:{“ $ gt”:1}}}

     

OR

     

{$ match:{count:{$ gt:1}}}

1 个答案:

答案 0 :(得分:1)

纠正以序列化JSON 接收的数据的最佳方法是解析它。 JavaScript具有JSON全局对象,可促进JSON转换并在应用程序中应用。

在您的案例中,证据表明来自客户的请求是这样的:

  "{\"count\":{\"$gt\":1}}"

但在您的框架中已更改为 STRING

   typeof('{"count":{"$gt":1}}')    ==>   'string'

不是对象

用作 request.query.matchQuery 作为Java脚本对象,可以将其转换为JavaScript对象。有关更多详细信息,请参见以下示例:

var aggregateQuery = {
   $match: JSON.parse(request.query.matchQuery)
}

注意:

如果您未通过添加

进入严格模式
 "use strict"

您可以使用

执行代码
 eval( code to be execute )

例如

 eval(`var e = { '$match':` + '{"count":{"$gt":1}}' + `}`)