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

时间:2018-11-04 06:21:05

标签: javascript node.js

我在函数中有一个if-else块。结果取决于q的值。如果q的值是“定义明确的查询”(例如:localhost:1235 / docs / q?beaven),则应打印4。 q = {}(例如:localhost:1235 / docs),结果应具有codemessage作为其属性(具有各自的值)并作为JSON传递。

但是,这没有发生。我搞砸了范围。输出为:""

 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);
    }
  });

}

1 个答案:

答案 0 :(得分:2)

if (q === {})永远不会是真实的,因为===会测试两者是否是完全相同的对象(如果它们具有相同的属性,则不是),在这里永远不会是这样,因为{{1 }}和q始终是不同的对象。

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