将数据库连接代码移动到另一个 nodejs 文件,没有返回连接对象。
我可以在 nodejs 中将数据写入 MongoDB。所有数据库连接代码都写在一个 .js 文件中。
现在我尝试将db连接代码分离到另一个.js文件中,现在似乎无法成功建立连接。
这是 1 .js 文件中的工作代码:
const mongoDBIP = '192.168.1.71';
const mongoDBPort = 27017;
const mongo= require('mongodb').MongoClient;
const mongoURL = 'mongodb://<mongo admin>:<password>@'+`${mongoDBIP}`+':'+`${mongoDBPort}`;
...
mongo.connect(mongoURL, { useNewUrlParser: true, useUnifiedTopology: true }, (err, db) => {
if (err) {}
var dbo = db.db(<databaseName>);
var collection = dbo.collection('messages');
collection.insertOne(message, (err, result) => {
if (err) {}
})
...
现在我把它分成 2 个 .js 文件:
var _mongo = require('./mongodb.js');
var mongoDBO = _mongo.mongoDBO;
...
var dbo = mongoDBO('feathers');
console.log('DBO:' + dbo); <-- here, dbo is NULL
var collection = dbo.collection('messages');
collection.insertOne(message, (err, result) => {
if (err) {}
})
...
下面是 mongodb.js 的内容:
// mongodb.js
const mongoDBIP = '192.168.1.71';
const mongoDBPort = 27017;
const mongoClient = require('mongodb').MongoClient;
const mongoURL = 'mongodb://<mongo admin>:<password>@'+`${mongoDBIP}`+':'+`${mongoDBPort}`;
function mongoDBO(database) {
var dbo;
mongoClient.connect(mongoURL, { useNewUrlParser: true, useUnifiedTopology: true }, (err, dbase) => {
if (err) {}
dbo = dbase.db(database); <-- here, dbo is NULL
});
return dbo;
}
module.exports = Object.freeze({
mongoDBO
});
我希望 mongodb.js 中的对象“dbo”不会是 NULL,但它是。这发生在 nodejs v10.x 和 v12.x 下。
您正在尝试返回一个尚不存在的值。在调用回调函数之前不会设置 dbo。原始函数此时已经返回。
您必须更改 mongodb.js 文件以导出接受回调的函数,并在准备好时将 dbo 传递给该回调。
我建议阅读回调和异步编程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句