我是Node和Mongo的新手,我试图在一个文件中连接mongo数据库并将数据库处理程序导出到许多其他文件,这样我就不需要在所有需要连接的文件中连接到数据库它。以下是我尝试这样做的方法
// db.js
var client = require('mongodb').MongoClient
var assert = require('assert')
var url = 'mongodb://localhost:27017/test'
client.connect(url, (err, db) => {
assert.equal(err, null)
module.exports = db
})
导出db处理程序后,我尝试在另一个文件中访问它的方法,如下所示
var db = require('./db')
console.log(db.collection('col'))
但它抛出一个TypeError,说db.collection
不是函数。如何在其他文件中访问db handler的方法?
答案 0 :(得分:2)
你需要导出函数,它需要callback1。当想要的参数无法获取时,将callback1设置为关于异步函数的callback2。
db.js
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
let callback, db;
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
assert.equal(null, err);
console.log("Connected successfully to server");
db = client.db(dbName);
callback(db)
client.close();
});
module.exports = function(cb){
if(typeof db != 'undefined' ){
cb(db)
}else{
callback = cb
}
}
other.js
const mongo = require("./db");
mongo((db) => {
//here get db handler
})
答案 1 :(得分:1)
这对我有用。我初始化集合对象并将每个集合附加到它。然后导出那个。
const MongoClient = require('mongodb').MongoClient;
let collections = {}
MongoClient.connect(url, function(e, client) {
if(e) {
console.log(e)
throw {error:'Database connection failed'}
}
let db = client.db('example-db');
collections.users = db.collection('users')
});
module.exports = collections
然后在其他文件中
const collections = require('../db/mongo')
collections.users.findOne({userName:'userName'})
如果您愿意,可以导出集合和数据库。这样您就可以使用db在其他地方创建其他集合和索引。
module.exports = {
db:db,
collections:collections
}
答案 2 :(得分:0)
可能最好的办法是只使用回调导出init()函数,然后在使用其他db方法之前调用它。否则,你可以尝试检查它是否在每个db访问方法的顶部初始化,但这可能实际上不是一个更易于维护的解决方案,因为它使它变得更复杂。