【发布时间】:2021-03-01 22:40:45
【问题描述】:
我正在尝试使用 Pusher 在 MongoDB 的帮助下构建一个聊天应用程序以进行实时通信。这些是我的文件。
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}`))
我想要得到的是控制台中的“更改”,通过 API http://localhost:9000/messages/new 但我得到的错误是
[nodemon]2.0.4 [nodemon]随时重启,输入
rs[nodemon] 观看路径:. [nodemon] 观看扩展:js,mjs,json
[nodemon] 开始node server.jsC:\Users\Desktop\Pingu - 聊天 应用\后端\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:145 throw new Error('收集方法' + i + '是同步的'); ^错误:集合方法 watch 是同步的 在 NativeCollection。 [作为手表] (C:\Users\Desktop\Pingu - 聊天 应用\后端\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:145:15) 在 file:///C:/Users/Desktop/Pingu%20-%20Chat%20App/backend/server.js:38:36 在 ModuleJob.run (internal/modules/esm/module_job.js:146:23) 在异步 Loader.import (internal/modules/esm/loader.js:165:24) 在异步 Object.loadESM (internal/process/esm_loader.js:68:5) [nodemon] 应用程序崩溃 - 在启动前等待文件更改...
这里是文档docs.mongodb.com/manual/changeStreams 的链接,我可以从这里得到的是,它可以通过两种方式完成,我实现了“监视”方式,但不知道如何实现异步等待方式。
这里也是我试图学习的 youtube 视频的链接,youtube.com/watch?v=gzdQDxzW2Tw 这部分从时间戳 2:59:00 开始
有人可以帮忙吗?提前致谢。
【问题讨论】:
-
文档是怎么说的?
-
请将错误的完整堆栈跟踪添加到问题中。
-
@D.SM添加了错误和文档。
-
在我看来不像完整的堆栈跟踪。
-
@D.SM 添加更多信息,使用 nodemon 命令。
标签: node.js mongodb mongoose real-time pusher