【问题标题】: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 query 和filter 结果并返回该结果。使用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;
【解决方案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());