J'essaie de construire une application de chat utilisant Pusher pour la communication en temps réel avec l'aide de MongoDB. Voici mes fichiers.
dbMessages.js
import mongoose from 'mongoose'
const pinguSchema = mongoose.Schema({
message: String,
name: String,
timestamp: String,
received: Boolean
})
export default mongoose.model('messagecontents', pinguSchema)
server.js
import express from "express"
import mongoose from 'mongoose'
import Messages from './dbMessages.js'
import Pusher from 'pusher'
//config
const app = express()
const port = process.env.PORT || 9000
const pusher = new Pusher({
appId: "###",
key: "###",
secret: "###",
cluster: "###",
useTLS: ###
});
//middleware
app.use(express.json())
//DB config
const connection_url = "###";
mongoose.connect(connection_url,{
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true
})
const db = mongoose.connection;
db.once("open", () => {
console.log("DB connected...")
})
const msgCollection = db.collection("messagecontents");
const changeStream = msgCollection.watch();
changeStream.on("change", (change)=>{
console.log(change);
//api routes
app.get('/', (req,res) => {
res.status(200).send('hello')
})
app.get('/messages/sync', (req,res) => {
Messages.find((err, data) => {
if(err){
res.status(500).send(err)
} else{
res.status(200).send(data)
}
})
})
app.post('/messages/new', (req,res) => {
const dbMessage = req.body
Messages.create(dbMessage, (err, data) => {
if(err){
res.status(500).send(err)
} else{
res.status(201).send(data)
}
})
})
//listen
app.listen(port, () => console.log(` Server running on port: ${port}`))
Ce que j'essaie d'obtenir, c'est le "changement" dans ma console, par l'API http://localhost:9000/messages/new. Mais l'erreur que j'obtiens est la suivante
[nodemon] 2.0.4 [nodemon] pour redémarrer à tout moment, entrez
rs
[nodemon] watch path(s) : . [nodemon] regarder les extensions : js,mjs,json
[nodemon] démarragenode server.js
C:\Users\Desktop\Pingu - Chat App \backend\node_modules\mongoose\lib\drivers\node -mongodb-native \collection.js :145 throw new Error('La méthode de collecte ' + i + ' est synchrone') ; ^Erreur : La surveillance de la méthode de collection est synchrone à NativeCollection. [as watch] ( C:\Users\Desktop\Pingu - Chat App \backend\node_modules\mongoose\lib\drivers\node -mongodb-native \collection.js :145:15) at file:///C:/Users/Desktop/Pingu%20-%20Chat%20App/backend/server.js:38:36 at ModuleJob.run (internal/modules/esm/module_job.js:146:23) at async Loader.import (internal/modules/esm/loader.js:165:24) at async Object.loadESM (internal/process/esm_loader.js:68:5) [nodemon] app crashed - waiting for file changes before starting...
Voici le lien vers la documentation docs.mongodb.com/manual/changeStreams D'après ce que j'ai compris, il y a deux façons de procéder. J'ai implémenté la méthode "watch", mais je ne sais pas comment implémenter la méthode "async-await".
Voici également le lien vers la vidéo youtube à partir de laquelle j'ai essayé d'apprendre, youtube.com/watch?v=gzdQDxzW2Tw cette partie commence à partir de l'horodatage 2:59:00
Quelqu'un peut-il m'aider ? Merci d'avance.