javascript - 当客户端连接到服务器时,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”)。
我的请求哪里出错了?
解决方案
该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 在评论中指出的库的本机承诺接口。
推荐阅读
- electron - Is there a way to install dependencies like msbuild, .net framework or node.js with the electron app builder?
- python-3.x - chrome 84 webdriver 是否与 selenium 3.141.0 兼容?
- java - Saving sucessfully copied Files from A to B in Java when Programm crashes?
- sql - MariaDB - LEFT JOIN does not return all rows
- android - 如果按钮在水平线性布局中的微调器之后,则无法正确显示
- javascript - Simplifying an object created using map
- javascript - 动态加载脚本时,如何让 WebStorm 识别本地导入的文件?
- python - 我可以通过按键更改 pygame 对象的恒定移动方向吗?
- python - 在 Visual Studio 之外启动 python virtualenv 代码
- typescript - TypeScript:根据名称有条件地将一组类型转换为一组不同的类型