【问题标题】:Unable to call javascript function globally无法全局调用javascript函数
【发布时间】:2019-08-29 10:37:53
【问题描述】:

我正在使用 mongoDB 开发 nodejs 应用程序。我编写了一个函数,它将过滤来自 mongodb 的一些数据并存储在变量“docs”中。我尝试了几种方法来全局声明一个函数并尝试访问该变量“docs”,但我做不到。`

 conn.then(client=> client.db('myprojectone').collection('offlinemessage').find({nameTo:"sd"}).limit(1).toArray(function(err, docs) {
      if(err) { console.error(err) }
       res.send(JSON.stringify(docs))
      console.log(docs);
      return docs;
}))

`

【问题讨论】:

    标签: javascript node.js mongodb function express


    【解决方案1】:

    创建一个辅助函数来执行您的所有要求以及DB queryfilter 结果并返回该结果。使用module.exports 导出此函数,如下所示。

    utils.js // 帮助文件

    const utils = {};
    
    utils.getData = async () => {
        try {
            // ...Your business logic
            return true; // It will be your variable 
        } catch (err) {
            logger.error(err);
            throw err;
        }
    };
    
    module.exports = utils;
    

    致电utils.getData() 获取结果;

    用户控制器

    const utils = require('./helper/utils');
    
    const userController = {};
    
    userController.getData = async () => {
        try {
            const result = await utils.getData();
        } catch (err) {
            logger.error(err);
            throw err;
        }
    };
    
    module.exports = userController;
    

    【讨论】:

      【解决方案2】:

      你不能在函数之外访问异步函数变量。

      【讨论】:

      • 你需要同步调用
      【解决方案3】:

      Express.js 提供访问全局函数的简单方法

       fnName = function(){ return "hi"; }; // i.e. don't do: var name = function(){ ... };
          console.log(fnName());         // this prints "hi"
          console.log(global.fnName());  // this also prints "hi" - it was assigned to global.

      【讨论】:

        【解决方案4】:

        一种可能的解决方案是创建一个名为 utils.js 的服务 js 类文件,然后添加您全局需要的此类,

        utils.js

        export default class Example {
          static getDocs() {
            // Rest of the global method
          }
        }
        

        在需要 docs 变量的地方,您只需调用方法 getDocs()

        import Utils from '<location_to_utils.js>';
        console.log(Utils.getDocs());
        

        【讨论】:

          猜你喜欢
          • 2014-03-22
          • 2013-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多