首页 > 解决方案 > 变量的范围和更改节点中的全局变量

问题描述

我在函数中有一个 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);
    }
  });

}

标签: javascriptnode.js

解决方案


if (q === {})永远不会是真的,因为===测试两者是否是完全相同的对象(而不是它们是否具有相同的属性)并且这里永远不会是这种情况,因为q并且{}总是不同的对象。

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


推荐阅读