提问者:小点点

MongoDB无法等待结果


我无法使mongoclient.connect在继续之前等待结果。我试图将db从Server.js(连接mongoclient的地方)传递到routes/api.js(处理post请求的地方)。但它不起作用,我总是得到:

TypeError:无法读取未定义的属性“Collection"

下面是我的routes/api.js:

var db = require("../server");

router.post('/video_url', async (req, res) => {
    const cursor = db.collection('movie').findOne({ link: req.body.videoURL }, function (findErr, result) {
        if (findErr) throw findErr;
    console.log(cursor)
});

server.js:

var db = async function () {
    return await MongoClient.connect(MONGODB_URI, function(err, client) {
        try {
            if(err) throw err;

            db = client.db('sub-project');

            // Start the application after the database connection is ready
            app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));
            return db;
        }
        catch(ex) {
            console.log(ex)
        }
    });
}

module.exports = db;

编辑:

var dbObject = (async function() {
    var connection = await new Promise(function(resolve, reject) {
        MongoClient.connect(MONGODB_URI, { useNewUrlParser: true }, function(err, client) {
            try {
                if (err) throw err;

                db = client.db('sub-project');

                // Start the application after the database connection is ready
                app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));
                resolve(db);
            } catch (ex) {
                console.log(ex)
                reject(ex);
            }
        });
    });
    return connection;
})();

    console.log("TYPEOF DB IN", typeof(dbObject))
    console.log("TYPEOF DB.COLLECTION IN", typeof(dbObject.collection))

两个console.log()都未定义。。。这正常吗?


共1个答案

匿名用户

将此代码用于。您的代码没有工作,因为您的函数在您需要的时候没有被调用。

var dbObject;
(function() {
  MongoClient.connect(MONGODB_URI, { useNewUrlParser: true }, function(err, client) {
   try {
    if (err) throw err;

    db = client.db('sub-project');
    // Start the application after the database connection is ready
    app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));
   dbObject = db;
   } catch (ex) {
     console.log(ex);
   }
  });
 })();


 setTimeout(function() {
  console.log("TYPEOF DB IN", typeof(dbObject))
   console.log("TYPEOF DB.COLLECTION IN", typeof(dbObject.collection))
 }, 2000);

module.exports = dbObject;