Ошибка возникает при просмотре changeStream () моей базы данных mongodb с использованием NodeJS

#node.js #mongodb #mongoose #mern #changestream

#node.js #mongodb #мангуст #мерн #changestream

Вопрос:

ошибка: «Просмотр метода сбора синхронен».

У меня есть база данных whatsAppdb в mongo atlas, и теперь я хочу сделать свой mongodb в режиме реального времени, поэтому для этого я использую changestream в коллекциях mongodb, как показано в коде, но при этом возникает ошибка «просмотр метода сбора синхронен», как показано на рисунке.

В журнале консоли печатается сообщение «Db подключена», если я не пишу инструкцию db.collection («Contact»), но приложение вылетает, как только добавляется эта инструкция.

/************************************/

     [    
const db =mongoose.connection;
db.once("open",function(){
    console.log("Db is connected");
});

const msgCollection = db.collection("Contact");
const changeStream = msgCollection.watch();

changeStream.on("change",function(change){
    console.log(change);
});

const contactsSchema = {
    id:Number,
    name : String,
    message:String,
    time:String

};

const Contact = mongoose.model("Contact", contactsSchema);

app.get("/message",function(req,res){
    Contact.find(function(err,findContact){
        if(!err){
            res.send(findContact);
        }else{
            res.send(err);
        }
    });
});

app.post("/",function(req,res){
    Contact.create(req.body,function(err,data){
        if(!err){
            res.send(data);
        }else{
            res.send("Try Agian.");
        }
    });
});



app.listen(8000,function(err){
    if(!err){
        console.log("server started at port 8000");
    }else{
        console.log(err);
    }
});]
 

скриншот ошибки

Ответ №1:

Просто добавьте ожидание при подключении к БД.

 await db.once("open", () => {
  console.log("DB connected");
}); 

Ответ №2:

Ваша проблема заключается в том, что вы не гарантируете, что ваша функция просмотра вызывается после подключения к БД. Подключение к mongo происходит асинхронно. Когда вы вызываете свой поток изменений. Возможно, у вас еще нет подключения. Вы должны изменить свой код следующим образом.

 db.once("open",function(){
    console.log("Db is connected");
const msgCollection = db.collection("Contact");
const changeStream = msgCollection.watch();

changeStream.on("change",function(change){
    console.log(change);
});
});