正在导出mongodb'db'到另一个node.js模块

Exporting mongodb 'db' to another node.js module

本文关键字:另一个 node js 模块 db mongodb      更新时间:2023-09-26

我尝试使用mongodb MongoClient连接到数据库一次,然后在整个应用程序的其他地方使用db变量。我遵循文件中提供的模式。但由于某种原因,我的db变量即将出现undefined。这是我的代码:

mongo.js:中

var Db = require('mongodb').Db,
  MongoClient = require('mongodb').MongoClient,
  Server = require('mongodb').Server;
var dbconnection;
MongoClient.connect("mongodb://127.0.0.1/smartmonthly", function (err, db) {
  if (err) {
    console.log("connection err ", err);
    throw err;
  } else {
    console.log("successfully connected to the database");
    this.dbconnection = db;
  }
});
module.exports.dbconnection = dbconnection;

Question.js:中

var mongo = require('./mongo.js');
module.exports = {
  all: function() {
     var questionsCursor = mongo.dbconnection.collection('Question').find({"Vertical": "Cellular"} );
     questionsCursor.toArray(function(err, documents) {
        console.log("documents length ", documents.length);
        questions = documents;
        mongo.db.close();
        return questions;
  });
 }
}

此代码在以下行引发错误:TypeError: Cannot read property 'collection' of undefined

var questionsCursor = mongo.dbconnection.collection('Question').find({"Vertical": "Cellular"} );

我错过了什么?

dbconnection在回调函数中定义时无法导出。如果您想重用mongodb connneciton instance,您可以从本机mongodb驱动程序导出一个函数use promise(更多信息,请查看官方节点mongodb驱动器):

db.js

`use strict';
var MongoClient = require("mongodb").MongoClient;
function getDb() {
    return MongoClient.connect(yourConnString).then(function (db) {
        return db;
    })
}
module.exports = getDb();

example.js

'use strict';
 var getDbIns = require('./db');
 getDbIns.then(function (db) {
 var col = db.collection("tmp");
 return col.insertOne({name: 'test'}).then(function (res) {
      console.log(res.insertedCount);
      db.close();
      return res.insertedCount;
    })
});