Ary*_*Jha 3 real-time mongoose mongodb node.js pusher
我正在尝试在 MongoDB 的帮助下使用 Pusher 构建一个聊天应用程序来进行实时通信。这些是我的文件。
dbMessages.js
import mongoose from 'mongoose'
const pinguSchema = mongoose.Schema({
message: String,
name: String,
timestamp: String,
received: Boolean
})
export default mongoose.model('messagecontents', pinguSchema)
Run Code Online (Sandbox Code Playgroud)
服务器.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}`))
Run Code Online (Sandbox Code Playgroud)
我想要得到的是控制台中的“更改”,通过 API http://localhost:9000/messages/new 但我得到的错误是
[nodemon] 2.0.4 [nodemon] 要随时重新启动,请输入
rs[nodemon] 监视路径:。[nodemon] 观看扩展:js,mjs,json
[nodemon] 开始node server.jsC:\Users\Desktop\Pingu - Chat App\backend\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:145 throw new Error('集合方法 ' + i + ' 是同步的'); ^错误:Collection 方法 watch 在 NativeCollection 上是同步的。[作为手表] (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 在 ModuleJob.run (internal/modules/esm/module_job.js:146:23) 在 async Loader.import (internal/modules) /esm/loader.js:165:24) 在 async Object.loadESM (internal/process/esm_loader.js:68:5) [nodemon] 应用程序崩溃 - 启动前等待文件更改...
这是文档docs.mongodb.com/manual/changeStreams的链接,从这里我可以得到的是,它可以通过两种方式完成:我实现了“监视”方式,但不知道如何实现异步-等待方式。
这里还有我试图学习的 YouTube 视频的链接,youtube.com/watch?v= gzdQDxzW2Tw 这部分从时间戳 2:59:00 开始
有人可以帮忙吗?提前致谢。
很抱歉您收到的评论完全没有帮助并且浪费时间。您共享的所有代码实际上对于解决问题都有帮助。
问题是您在调用监视函数时未确保已连接到数据库。连接到 mongo 是异步的,因此当您调用 watch 函数时,您可能仍在建立数据库连接的过程中。像这样修改你的代码......
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);
);
})
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。我对收到的其他评论感到非常失望。
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |