我试图将函数返回保存在 const 中,因为我将能够使用函数外部的信息。为了更多地说明我的问题,这里有一段代码。
const express = require('express')
const app = express()
var routes = require('./routes/routes');
var bodyParser = require('body-parser')
var MongoClient = require('mongodb').MongoClient;
const dbb = MongoClient.connect("mongodb://user:tpassword@ds137600.mlab.com:37600/tasksdb", { useNewUrlParser: true }, function (err, db) {
if (!err) {
console.log(db.db().databaseName);
}
else {
console.log(err)
}
});
app.use('/', routes);
app.use(bodyParser.urlencoded({ extended: true }));
app.listen(3000, function () {
console.log("second", dbb);
console.log('Example app listening on port 3000!')
})
这是我在终端中得到的内容:
second undefined
Example app listening on port 3000!
tasksdb
如何在 MongoClient.connect
函数之外获取数据库信息,以便将它们传递给路由模块?
最佳答案
首先在平台上复制粘贴代码时要小心,如果代码中有密码,请删除密码,事实上mongoURL应该在.env文件中而不是在主js中。
MongoClient.connect() 是一个异步调用,因此当该行
console.log("second", dbb);
已执行,MongoClient.connect() 仍待处理
为了使其同步,有多种解决方案:
利用回调
const dbb = MongoClient.connect("mongodb://user:tpassword@ds137600.mlab.com:37600/tasksdb", { useNewUrlParser: true }, function (err, db) {
if (!err) {
console.log(db.db().databaseName);
app.listen(3000, function () {
console.log("second", dbb);
console.log('Example app listening on port 3000!')
})
}
else {
console.log(err)
}
});
现在 console.log 只会在 mongoose.connect 完成后执行
异步等待 如果你的nodejs >= 7.10.1,你的nodejs支持Async wait,你可以检查 here
(async function init() {
const dbb = await MongoClient.connect("mongodb://user:tpassword@ds137600.mlab.com:37600/tasksdb", {
useNewUrlParser: true
});
if(dbb){
app.use('/', routes);
app.use(bodyParser.urlencoded({
extended: true
}));
app.listen(3000, function() {
console.log("second", dbb);
console.log('Example app listening on port 3000!')
})
}
})();
这个解决方案更具可读性。
关于javascript - 如何将连接结果保存在nodeJs中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50552190/