#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);
});
});