当我的 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”进行了检查)。
我的请求哪里出了问题?
最佳答案
getAllImages
函数不会返回您的值。它只返回 connect
方法返回的内容。
由于您使用 await
调用 getAllImages
函数,因此返回一个 promise 并用您的值解析它。
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));
}
});
});
})
};
但是,最准确的模式是使用库的 native Promise 接口(interface),如 jfriend00 在评论中指出的那样。
关于javascript - 当客户端连接到服务器时,NODE.JS 中的 Async Await 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398416/