【发布时间】:2017-12-23 17:38:52
【问题描述】:
我在我的应用程序 mongoose.js 和 socket.io 中使用。我尝试在猫鼬回调中发出一个事件。但我的客户(角度)似乎没有收到任何东西。此外,每次在服务器端、回调和“用户”数据中发出事件时,它都会不断断开连接。
确切地说,我的 User 模型以以下方式包装:
const mongoose = require('mongoose')
class DBReader {
constructor(name, schema) {
this.Model = require(`./models/${name}`)
}
find(params, callback) {
this.Model.find(params, callback)
}
findOne(params, callback) {
this.Model.findOne(params, callback)
}
findById(id, callback) {
this.Model.findById(id, callback)
}
}
module.exports = DBReader
我像这样实例化我的用户:
const User = new DBReader('user')
以下代码有效,也就是说我的客户端没有断开连接并接收两个事件(它有效,因为我没有在回调中发出“用户”数据)...
function socket(httpServer) {
const io = require('socket.io')(httpServer)
io.on('connection', socket => {
console.log('User connected')
socket.emit('hello', 'Hello World !')
User.findOne({}, (err, user) => {
console.log(err)
console.log(user) // Displays the requested user
})
socket.emit('hello', 'Wooorld !')
socket.on('disconnect', () => {
console.log('User disconnected')
})
})
}
此代码也有效(因为我不发出“用户”数据)。
function socket(httpServer) {
const io = socketio(httpServer)
io.on('connection', socket => {
console.log('User connected')
socket.emit('hello', 'Hello World !')
User.findOne({}, (err, user) => {
console.log(err)
console.log(user)
socket.emit('hello', 'hellooo !')
})
socket.emit('hello', 'Wooorld !')
socket.on('disconnect', () => {
console.log('User disconnected')
})
})
}
但此代码不起作用(在回调中使用“用户”数据发出的事件)...
function socket(httpServer) {
const io = socketio(httpServer)
io.on('connection', socket => {
console.log('User connected')
socket.emit('hello', 'Hello World !')
User.findOne({}, (err, user) => {
console.log(err)
console.log(user)
socket.emit('hello', user)
})
socket.emit('hello', 'Wooorld !')
socket.on('disconnect', () => {
console.log('User disconnected')
})
})
}
你有什么解释吗?您需要更多信息吗?
【问题讨论】:
-
您在 Angular 中使用了哪个 socket.io 模块?
-
socket.io-client
-
我现在想知道我的问题是否来自我尝试发送的对象类型。我认为 socket.io 完成了所有工作,但如果我的用户不是有效的 JSON 字符串怎么办?
-
是的,我猜你的用户对象有问题!在您发出之前,您是否使用 console.log(user) 正确获取了您的对象?
-
如果客户端断开连接,我会假设服务器正在抛出错误。
标签: node.js angular mongoose socket.io