为什么从mongodb find()返回的数据未在api路由中提供任何数据?

时间:2019-01-19 06:28:29

标签: javascript mongodb

此结果有什么问题?我的res.send(dbResult)没有给我任何数据。它是空的。

/* GET users listing. */
router.get('/', function(req, res, next) {

  async function getData(){
    try{
     var dbResult = await mongodb.findData("contacts","iyaiContacts");
     console.log('before dbResult');
     res.send (dbResult);
    }catch(error){
      console.log("error getting contacts...", error.message);
    }
  }
  getData();
});

为清楚起见,附加代码。我有一个db.js文件,用于处理MongoDB连接和查询。这是“查找数据”功能。抱歉,直到人们提出问题,我才意识到自己一直在困惑。

const findData = (myColl, myDb) => {
  try {
    MongoClient.connect(
      url,
      function(err, client) {
        client
          .db(myDb)
          .collection(myColl)
          .find()
          .sort({ nmFull: 1 })
          .toArray(function(err, result) {
            console.log("find() result...", result);
            return result;
          });
      }
    );
  } catch (e) {
    console.log(`findData() error message is...${e.message}`);
    client.close(); // trying to close open db connection if it exist
    throw e;
  }
};

1 个答案:

答案 0 :(得分:1)

您正在为应用程序编写后端服务,该服务需要从MongoDB中获取数据。问题在于您的处理功能是在同步庄园中进行的,而不是您需要异步处理。

// Quick fix for your code

const findData = (myColl, myDb) => {
    return new Promise(function (resolve, reject) {
        MongoClient.connect(url)
            .then((client) => {
                return client.db(myDb)
            }).then((db) => {
                return db.collection(myColl).find().sort({ nmFull: 1 })
                    .toArray((err, result) => { resolve(result); });
            }).catch((err) => {
                reject(err);
            });
    });
};

以下是在Node.js上连接MongoDB的一些最佳实践,