在建立连接之前关闭Socket.io

在建立连接之前关闭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') 
    }) 
    }) 
} 

你有什么解释?你需要更多的信息吗?

+0

? – willmaz

+0

socket.io-client – Arpp

+0

我想知道如果我的问题可能来自我尝试发送的对象类型。我以为socket.io正在做所有的工作,但如果我的用户不是有效的JSON字符串呢? – Arpp

我找到了答案-_-!

事实上,事实证明,我无法发送口音(é,è,à...)。这是因为我的客户端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的问题,我不能帮你提供不够代码