javascript - 变量的范围和更改 Node 中的全局变量

标签 javascript node.js

我的函数中有一个 if-else block 。结果取决于 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);
    }
  });

}

最佳答案

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

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

关于javascript - 变量的范围和更改 Node 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138286/

相关文章:

javascript - React Native Fetch API 不返回我的调用

javascript - 自动对焦时光标不闪烁

javascript - 如何自定义 .NET 构建?

javascript - 是否可以使用 Jade 将 'a variable' 渲染为 'a-variable'?

javascript - 如何在用户发送消息时停止 'is typing'功能

javascript - Qt QML Javascript 是如何管理内存的?

javascript - 使用 Javascript Yammer API 访问外部网络数据

javascript - 如何创建共享的、特权的、公共(public)的方法?

node.js - 托管没有端口的 Nodejs 应用程序

node.js - Node.js 和 NPM 的 Coding Assistance 在 WebStorm 中无法启用