繁体   English   中英

如何将连接结果保存到nodeJs中的变量中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM