首页 > 解决方案 > 当客户端连接到服务器时,NODE.JS 中的异步等待失败

问题描述

当我的 React 客户端连接到服务器时:

index.js:

var mongoAPI = require("./MongoDB/mongodb.js");

app.get("/getImages" , async function(req,res) {
  var db_images = await mongoAPI.getAllImages();  // this is undefined
  console.log(db_images);
  res.json(db_images);
});

它进入数据库:

mongodb.js:

getAllImages = async () => {
  await MongoClient.connect(url, function(err, db) {
    if (err) {
      throw err;
    }
    var dbo = db.db("PicturesDB");
    dbo
      .collection("Images")
      .find({})
      .toArray(function(err, result) {
        if (err) {
          // res.send(err);
          return err;
        } else {
          // res.send(JSON.stringify(result));
          return JSON.stringify(result);
        }
      });
  });
};


module.exports = {
    ...
    ... 
  getAllImages: getAllImages
};

然而db_images总是 undefined ,即使数据正确返回(我在getAllImages方法中检查了“console.log”)。

我的请求哪里出错了?

标签: javascriptnode.jsasynchronousasync-await

解决方案


getAllImages函数不会返回您的值。它只返回connect方法返回的内容。

由于您await用于调用该getAllImages函数,因此返回一个承诺并用您的值解决它。

getAllImages = async () => {

  return new Promise((resolve, reject) => {

      MongoClient.connect(url, function(err, db) {

       if (err) {
         reject(err)
       }

       var dbo = db.db("PicturesDB");

       dbo
        .collection("Images")
        .find({})
        .toArray(function(err, result) {
          if (err) {

           reject(err)

        } else {

          resolve(JSON.stringify(result));
        }
      });
  });



  })

};

但是,最准确的模式是使用 jfriend00 在评论中指出的库的本机承诺接口。


推荐阅读