在建立连接之前关闭Socket.io
问题描述:
我在我的应用程序mongoose.js和socket.io中使用。我尝试在一个猫鼬回调中发出一个事件。但我的客户(角度)似乎没有收到任何东西。此外,每当事件发送到服务器端时,在回调中和“用户”数据中都会持续断开连接。在建立连接之前关闭Socket.io
准确地说,我的用户模型被包裹在下列方式:
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')
})
})
}
你有什么解释?你需要更多的信息吗?
答
我找到了答案-_-!
事实上,事实证明,我无法发送口音(é,è,à...)。这是因为我的客户端socket.io包早于服务器端(1.7。?和2.0.3)。
我希望这个答案将至少帮助旁边的人试图发出与口音的对象......你在你的角度使用该模块socket.io
答
你只能发射一些东西,可以通过JSON.stringify
( - >没有循环引用)字符串化。当你试图发送整个猫鼬文件时,这将会失败。
要么你可以做一个mongooseModel.find({...}).lean().exec(function callback(err, user){...})
这将返回一个普通的javascript对象,而不是mongooseDocument(可以序列化),或者你可以使用mongoose.toJSON method自己转换它。
关于socket.io/angular的问题,我不能帮你提供不够代码
? – willmaz
socket.io-client – Arpp
我想知道如果我的问题可能来自我尝试发送的对象类型。我以为socket.io正在做所有的工作,但如果我的用户不是有效的JSON字符串呢? – Arpp