2017-07-18 9 views
0

私のアプリmongoose.jsとsocket.ioで使用します。私はmongooseコールバックでイベントを出そうとします。しかし、私のクライアント(角度)は何も受け取っていないようです。また、イベントがサーバーサイド、コールバック、および「ユーザー」データで発行されるたびに、連続的に切断されます。接続が確立する前に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') 

次のコード作品、それが私の言うことですクライアントは切断されず、2つのイベントを受信します(コールバックで 'ユーザー'データを送信しないために機能します)...

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.3?2.0.3と比較して)。私はこの答えは、少なくともアクセントを持つオブジェクトを放出しようとして次の人を助けることを願っています

...あなたの角度で使用しているsocket.ioためのモジュール

0

JSON.stringify( - >循環参照なし)で文字列化できるもののみを送信できます。 mongooseDocument全体を送信しようとすると、失敗します。

mongooseModel.find({...}).lean().exec(function callback(err, user){...})は、mongooseDocument(シリアル化可能)ではなくプレーンなjavascriptオブジェクトを返すか、mongoose.toJSON methodを使って自分で変換することができます。

socket.io/angularの問題については、私はあなたが十分にコード

関連する問題