2016-04-01 2 views
1

Ich versuchte es heraus zu bekommen, indem es in eine Funktion und die Rückgabe bestanden, und es versäumt, dies zu tun.Wie kann ich das Ergebnis von Mungo Anruf extrahieren und es in eine Variable

sah ich ein Beispiel, wo jemand module.exports.VariableName = objects;

Mein Problem verwendet wird, kann ich immer noch nicht, oder dass Variablenname verwenden zugreifen. z.B. var names = Collection; für die gleiche Datei.

Reference: Sammlung nicht

definiert

Was mache ich falsch? Vielen Dank.

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

Wenn die 'require' für diese Datei ausgeführt wird, bevor' listCollections' ausgeführt wird, hat sie keinen 'Collection'-Schlüssel – hyades

Antwort

0

Das Problem ist, dass Sie module.exports ein Ergebnis eines Asynchron-Betrieb zuweisen. Dies bedeutet, dass Sie diese Daten höchstwahrscheinlich nach zuweisen, mit require().

Mit nur den bereitgestellten Code Betrachtung zu lösen eine Möglichkeit, dies Ihr Code in ein Versprechen wickeln würde, die mit dem names löst:

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

Und dann verwenden mag:

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 
}); 
Verwandte Themen