用于 MERN STACK 项目时,toArray 函数无法正常工作

问题描述 投票:0回答:1

This the output image 我正在关注 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"
  }
}
javascript reactjs node.js mongodb mongoose-schema
1个回答
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);
}

参考:猫鼬承诺

© www.soinside.com 2019 - 2024. All rights reserved.