【问题标题】:MEAN Nodejs JSON.parse passing data from client to serverMEAN Nodejs JSON.parse 将数据从客户端传递到服务器
【发布时间】:2016-11-12 22:05:39
【问题描述】:

我正在使用 MEAN 堆栈,并且正在向我的 Nodejs 服务器端点动态发送查询参数。 我的客户端控制器:

$http.get('/api/things',{params:{query:query}}).then(response => {
      this.awesomeThings = response.data;
      socket.syncUpdates('thing', this.awesomeThings);
    });

其中查询是注入控制器的值。 这是服务器控制器功能(有效):

export function index(req, res) {
  var query = req.query.query && JSON.parse(req.query.query)
  Thing.find(query).sort({_id:-1}).limit(20).execAsync()
    .then(respondWithResult(res))
    .catch(handleError(res));
}

上述方法有效,但我试图理解这一行

var query = req.query.query && JSON.parse(req.query.query)

因为我以前从未见过这个(而且我不是来自编程背景)。我 console.logged 查询并理解它是一个对象(Mongodb 需要)但是当我 console.logged (JSON.parse(req.query.query)) 或 JSON.parse(query) 找出最终输出时,程序停止工作,没有错误消息,很奇怪.. 如果有人可以解释上述语法以及为什么必须以这种方式完成它才能工作,那将不胜感激.. PS当我尝试像这样控制台记录JSON.parse时,即使它应该没有任何效果,它也无法加载:

export function index(req, res) {
  var query = req.query.query && JSON.parse(req.query.query)
  var que = JSON.parse(req.query.query)
  Thing.find(query).sort({_id:-1}).limit(20).execAsync()
    .then(respondWithResult(res))
    .catch(handleError(res));
    console.log("que"+que)
}

【问题讨论】:

  • 这是唯一有效的代码。如果我不这样编码,它就行不通。上面的代码取自实际的工作代码,我只是想问一下这个语法是什么意思以及它为什么起作用。

标签: json node.js mongodb mean


【解决方案1】:

function one() {
  var x = {};
  var res = JSON.parse(x.y);
  console.log(res);
}

function two() {
  var x = {};
  var res = x.y && JSON.parse(x.y);
  console.log(res);
}
<button onclick="one()">ERROR</button>
<button onclick="two()">NO ERROR</button>
var x = data && JSON.parse(data);

由于表达式是从左开始计算的,所以首先计算的是第一个数据。

如果未定义,则不执行下一部分 -> JSON.parse()。 另一方面,如果定义了数据,则尝试解析并将结果返回并存储在 x 中。

这里的主要优点是如果未定义变量,则解析不会运行。

这可能相当于说:

if(data) {x = JSON.parse(x);}

【讨论】:

  • 奇怪的是,如果我执行 var x = JSON.parse(data),数据不会加载,但是当我执行 x = data && JSON.parse(data) 时,它可以工作。跨度>
  • 可能data 没有定义,data &amp;&amp; 被保护不能运行JSON.parse(),否则会引发错误。
  • 如果数据为空怎么办?
  • 如果数据未定义,则 data && JSON.parse(data) 将返回未定义但不是 - 它正确返回数据
  • 这可能与此处未显示的其余代码有关
猜你喜欢
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多