我尝试通过将其变为函数并传递返回来实现它,但未能这样做。
我看到有人使用module.exports.VariableName = objects;
我的问题是我仍然无法访问或使用该VariableName。例如var names = Collection;
在同一个文件上。
ReferenceError:未定义集合
我做错了什么?谢谢。
mongoose.connection.on('open', function(ref) {
console.log('Connected to mongo server.');
//trying to get collection names
mongoose.connection.db.listCollections().toArray(function(err, names) {
if (err) {
console.log(err);
} else {
module.exports.Collection = names;
}
});
});

答案 0 :(得分:0)
问题是您正在为module.exports
分配异步操作的结果。这意味着您最有可能在使用require()
访问之后分配此数据。
通过仅考虑提供的代码,解决此问题的一种方法是将代码包装到使用names
解析的承诺中:
module.exports = function(mongoose) {
return new Promise(function(resolve, reject) {
mongoose.connection.on('open', function (ref) {
console.log('Connected to mongo server.');
//trying to get collection names
mongoose.connection.db.listCollections().toArray(function(err, names) {
if (err) {
reject(err);
}
else {
resolve(names);
}
});
});
});
}
然后使用它:
require('PATH_TO_CODE_ABOVE')(mongoose).then(function(collection) {
console.log(collection); // This logs the names collection
}, function(err) {
console.log(err); // this will log an error, if it happens
});