在 "Log.save();" - Mongodb 出现 "Promise { <pending> }" 错误

Getting "Promise { <pending> }" error at "Log.save();" - Mongodb

我正在按照 MongoDB Atlas 博客教程将信息添加到 mongodb,但出现上述错误。我试图解决这个错误,甚至尝试过但仍然遇到同样的问题...... 以下是我的连接文件

async function main(){

    /**
     * Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
     * See https://docs.mongodb.com/ecosystem/drivers/node/ for more details
     */

    const uri = "mongodb+srv://an:abc@abc-2yzxs.mongodb.net/test?retryWrites=true&w=majority";

    const client = new MongoClient(uri);

    try {
        // Connect to the MongoDB cluster
        await client.connect();

        await createListing(client, 
            {
                msg: client.msg
            }
        );
        return client;

    } catch (e) {
        console.error(e);
    } finally {
        await client.close();
    }
}

main().catch(console.error);


async function createListing(client, newListing){

    const result = await client.db("mydb").collection("mycollection").insertOne(newListing);
    console.log(`New listing created with the following id: ${result.insertedId}`);
}

以下是我的架构

const  mongoose  = require("mongoose");
const  Schema  =  mongoose.Schema;
const  mySchema  =  new Schema(
    {
    msg: {
    type: String
    }
    }
);

let  a  =  mongoose.model("mycollection", mySchema);
module.exports  =  a;

我的控制器:

const  Log  = require('../models/mySchema');
require('../connection');

 function createListing(data){

  let  Log  =  new Log({ msg: data});
    var err = Log.save();

    console.log("err is : ", err)
}
exports.createListing = createListing;


这就是我从服务器文件调用的方式

let log = require('./controllers/myController');

log.createListing(data);

您需要在 Log.save() 之前使用 await 来记录函数返回的实际值,而不是您正在获取的 promise pending

async function createListing(data){

  let  Log  =  new Log({ msg: data});
  let err = await Log.save();    
  console.log("err is : ", err)
}

我个人不会使用 mongoose,尽管您的教程使用。我只是用 mongodb.

import { connect } from 'mongodb'

async function main() {
  // try-catch
  const MONGO = 'mongodb+srv://an:abc@abc-2yzxs.mongodb.net/testretryWrites=true&w=majority'
  const client = await connect(MONGO, { 
    useNewUrlParser: true, 
    useUnifiedTopology: true })

  const mongo = client.db()
  const Log = mongo.collection('Log')
  await Log.insertOne({ message: 'test' })
}

我知道这与您遇到的问题不同,但我只是不知道为什么需要 mongoose。不是真的。