我通过 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}}}
最佳答案
纠正以序列化 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}}' + `}`)
关于javascript - 分配变量后对象行为发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999005/