如何提取mongoose调用的结果并将其传递给变量

时间:2016-04-01 18:58:39

标签: javascript node.js express mongoose

我尝试通过将其变为函数并传递返回来实现它,但未能这样做。

我看到有人使用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;
    }
  });
});




1 个答案:

答案 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
});