Node.js nodejs将mongo连接添加到全局

Node.js nodejs将mongo连接添加到全局,node.js,mongodb,Node.js,Mongodb,我正在将服务器启动时的mongo连接添加到我的全局obj,以便从任何文件访问它 // app.js mClient.connect(mongoUrl, function(err, db) { global.mongo = db; }); 像这样使用它 // store.js global.mongo.collection(thisColl, function(err, collection) { if (err) return self.emit("error", "collect

我正在将服务器启动时的mongo连接添加到我的全局obj,以便从任何文件访问它

// app.js
mClient.connect(mongoUrl, function(err, db) {
  global.mongo = db;
});
像这样使用它

// store.js  
global.mongo.collection(thisColl, function(err, collection) {
  if (err) return self.emit("error", "collection not found");

  collection.find(query, select).toArray(function(err, stores) {
    if (err || !stores) return self.emit("error", "result not found");

    return self.emit("done", stores);
    });
  });
但有时我会犯错误,我不知道怎么解决

// Error
{"code":"InternalError","message":"Cannot call method 'collection' of undefined"}

我这样做是因为它不会在每次请求时打开/关闭连接

我设法让它工作起来,也许不是更好的方式,但可以工作

// Create MongoDB connection
mClient.connect(mongoUrl, function(err, db) {
  global.mongo = db;
  // Start HTTP server  
  server.listen(4000, function() {
    console.log("%s listening at %s", server.name, server.url);
  });
});

global.mongo.collection
调用是否可能在
mClientconnect
回调发生之前发生?实际上,global.mongo.collection通过http调用获取调用。但我认为在执行查找时会调用mClient.connect mongodb节点本机驱动程序是完全事件驱动的,所以请使用事件驱动方式。否则它会完全搞砸。当你的应用程序启动时,“连接”应该发生。您还应该检查“err”值是否存在错误。正如“notXX”所建议的,在“connect”回调触发之前,你的应用程序不应该开始接受请求,否则在连接准备就绪之前,a请求可能会潜入。