[英]How to save connection result in a variable in nodeJs
我试图将函数返回值保存在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完成后才会执行
ASYNC AWAIT如果您的nodejs> = 7.10.1,则您的nodejs支持Async await,您可以在此处检查
(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!')
})
}
})();
该解决方案更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.