我正在关注 MERN stack 项目的 YouTube 教程,同时关注播放列表,但我在一个实例中遇到了困难。请帮忙!!
db.js
const mongoose = require('mongoose');
const mongoURI = 'mongodb://<username>:<password>@ac-czejupk-shard-00-00.e8wdets.mongodb.net:27017,ac-czejupk-shard-00-01.e8wdets.mongodb.net:27017,ac-czejupk-shard-00-02.e8wdets.mongodb.net:27017/?ssl=true&replicaSet=atlas-11o3y9-shard-0&authSource=admin&retryWrites=true&w=majority'
const mongoDB =async()=>{
await mongoose.connect(mongoURI, { useNewUrlParser: true }, async (err, result) => {
if (err) console.log("---", err);
else {
console.log("connected");
const fetched_data = await mongoose.connection.db.collection("food_items");
fetched_data.find({}).toArray(function(err, data) {
if (err) console.log(err);
else {
global.food_items = data;
console.log(global.food_items);
};
});
}
});
}
module.exports = mongoDB;
这是我面临问题的代码,在执行“console.log(global.food_items)”后,我在 mongodb 上部署了名为“food_items”的数据库,它应该给我“food_items”中所有项目的列表“但我得到的输出是空列表,请帮忙。
package.json
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcryptjs": "^2.4.3",
"express": "^4.18.2",
"express-validator": "^7.0.1",
"jsonwebtoken": "^9.0.2",
"mongodb": "^2.2.12",
"mongodb-legacy": "^6.0.0",
"mongoose": "^6.6.1",
"nodemon": "^3.0.1",
"react-jwt": "^1.2.0"
}
}
.toArray()
在这种情况下是不合适的。
您应该通过
Promise
:将查询处理为
.then()
fetched_data.find({}).then(function(data) {
// On fulfill
global.food_items = data;
console.log(global.food_items);
}, function (err) {
// On reject
console.log(err);
});
或使用
async/await
方式与其中任何一个:
await fetched_data.find();
await fetched_data.find().exec();
try {
let data = await fetched_data.find({});
global.food_items = data;
console.log(global.food_items);
} catch (err) {
console.log(err);
}
参考:猫鼬承诺