Ошибка «Promise {<pending>}» в «Log.save ();» - Монгодб - PullRequest
0 голосов
/ 04 марта 2020

enter image description here

Я следую учебнику по MongoDB Atlas Blog, чтобы добавить информацию в 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);

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Лично я бы не использовал mon goose, хотя у вас это подходит. Я просто использую 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. Это не совсем.

0 голосов
/ 04 марта 2020

вам нужно использовать await перед Log.save() для регистрации фактического значения, возвращаемого функцией вместо promise pending, который вы получаете.

async function createListing(data){

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