2017-07-18 137 views
0

我在我的應用程序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

回答

2

我找到了答案-_-!

事實上,事實證明,我無法發送口音(é,è,à...)。這是因爲我的客戶端socket.io包早於服務器端(1.7。?和2.0.3)。

我希望這個答案將至少幫助旁邊的人試圖發出與口音的對象......你在你的角度使用該模塊socket.io

0

你只能發射一些東西,可以通過JSON.stringify( - >沒有循環引用)字符串化。當你試圖發送整個貓鼬文件時,這將會失敗。

要麼你可以做一個mongooseModel.find({...}).lean().exec(function callback(err, user){...})這將返回一個普通的javascript對象,而不是mongooseDocument(可以序列化),或者你可以使用mongoose.toJSON method自己轉換它。

關於socket.io/angular的問題,我不能幫你提供不夠代碼

相關問題