Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变量的范围和更改节点中的全局变量_Javascript_Node.js - Fatal编程技术网

Javascript 变量的范围和更改节点中的全局变量

Javascript 变量的范围和更改节点中的全局变量,javascript,node.js,Javascript,Node.js,我在函数中有一个if-else块。结果取决于q的值。如果q的值是“定义良好的查询”(例如:localhost:1235/docs/q?beaven),那么它应该打印4。如果查询没有很好地定义,即.q={}(例如:localhost:1235/docs),那么结果应该有code和message作为它们的属性(以及它们各自的值),并作为JSON传递 但事实并非如此。我把望远镜弄乱了。输出为:“” if(q==={})永远不会为真,因为==测试这两个对象是否完全相同(而不是它们是否具有相同的属性),这

我在函数中有一个if-else块。结果取决于q的值。如果q的值是“定义良好的查询”(例如:localhost:1235/docs/q?beaven),那么它应该打印4。如果查询没有很好地定义,即.q={}(例如:localhost:1235/docs),那么结果应该有
code
message
作为它们的属性(以及它们各自的值),并作为JSON传递

但事实并非如此。我把望远镜弄乱了。输出为:
“”

if(q==={})
永远不会为真,因为
==
测试这两个对象是否完全相同(而不是它们是否具有相同的属性),这里永远不会出现这种情况,因为
q
{}
始终是不同的对象

您可能需要测试
q
上是否存在特定属性。或者您可以测试
if(Object.keys(q).length==0)
以查看
q
是否为空对象。但是,我认为对你的代码来说最好的可能是看看你在
q
上寻找的特定属性是否存在。

如果(q=={}
将永远不会是真的,因为
==
测试这两个属性是否完全相同(而不是它们是否具有相同的属性)这里永远不会出现这种情况,因为
q
{}
始终是不同的对象


您可能需要测试
q
上是否存在特定属性。或者您可以测试
if(Object.keys(q).length==0)
以查看
q
是否为空对象。但是,我认为最适合您的代码的可能是查看您在
q
上查找的特定属性是否存在。

尝试设置res.status尝试设置res.status您的代码可以工作,但它会发出警告。它说,未处理的承诺拒绝将在不久的将来终止Nodejs。@Vagabond-我的代码建议与被拒绝的承诺完全无关-这在代码的其他地方,而不是在您在问题中显示的任何代码中。所以,这似乎与你发布的内容无关。这是一个单独的问题,发生在您的真实代码部分中,您没有在此处显示。@Vagabond-也可能是您的
catch
块本身抛出了一个错误,导致
errorWrap()
返回一个被拒绝的承诺,而您在任何地方都不会处理该承诺。根据你的问题中的代码,这只是一种猜测的可能性。也可能是在真实代码的其他地方,承诺被拒绝了。你的代码可以工作,但它给出了一个警告。它说,未处理的承诺拒绝将在不久的将来终止Nodejs。@Vagabond-我的代码建议与被拒绝的承诺完全无关-这在代码的其他地方,而不是在您在问题中显示的任何代码中。所以,这似乎与你发布的内容无关。这是一个单独的问题,发生在您的真实代码部分中,您没有在此处显示。@Vagabond-也可能是您的
catch
块本身抛出了一个错误,导致
errorWrap()
返回一个被拒绝的承诺,而您在任何地方都不会处理该承诺。根据你的问题中的代码,这只是一种猜测的可能性。在真实代码的其他地方,承诺也可能被拒绝。
 function doSearch(app){

  return errorWrap(async function(req, res) {
    const q = req.query || {};
    try {
      // let results = await app.locals.finder.find(q);
      let results = "";
      // console.log(q);
      if(q === {}){
         results = {
          code: "BAD_PARAM",
          message: "required query parameter \"q\" is missing"
         };
         res.json(results);
      // results = await app.locals.finder.find(q);
      }else{
        results == 4;
        res.json(results);
      }

    }
    catch (err) {
      const mapped = mapError(err);
      res.status(mapped.status).json(mapped);
    }
  });

}