MongoDB не может дождаться результата - PullRequest
0 голосов
/ 21 сентября 2018

Я не могу заставить MongoClient.connect ждать результатов перед тем, как продолжить.Я пытаюсь передать базу данных из server.js, где я подключаю свой монгоклиент, к моему маршруту / api.js, где я делаю свои почтовые запросы.Но это не работает, я всегда получаю:

TypeError: Невозможно прочитать свойство 'collection' из неопределенного

Вот мои маршруты / 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 () undefined ... это то, чтонормально?

1 Ответ

0 голосов
/ 21 сентября 2018

Используйте этот код для server.js.Ваш код не работает, потому что ваша функция не вызывается, когда вы этого требуете.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...