首先,在平台上复制粘贴代码时要小心,如果代码中有密码,那么infact 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)
}
});
现在,只有在mongoose.connect完成后才会执行console.log。
异步等待
如果nodejs>=7.10.1,则nodejs支持异步等待,您可以检查
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!')
})
}
})();
这个解决方案更易读。