0

次のように、node.js Web アプリでグローバル MongoDB 接続を作成しようとしています。

var MongoClient = require('mongodb').MongoClient;
var mconn = null;

MongoClient.connect('mongodb://myHost:27017/users', function(err, udb) {     //open connection to MongoDB db
    if (!err){
        mconn = udb;
    }
    else
        console.error("Could not connect to sql: ", err);
});

次に、この接続を「socket.emit」イベントを介して次のように渡します。

io.sockets.on('connection', function(socket) {

    socket.on('updates', function(PEMSID){
         gps_helper.get_gps(PEMSID, conn, function(data){      //make initial query to GPS table for marker coordinates
            socket.emit('message', {message: data, mongoConnection: mconn});
         });
         intervalID = setInterval(function(){
             gps_helper.get_gps(PEMSID, conn, function(data){      //query GPS table for marker coordinates on an interval
                socket.emit('message', {message: data, mongoConnection: mconn});
             });
         }, 30000);
    });

これは機能していないようです。反対側の「mongoConnection」値は空です。この方法で送信することは可能ですか?

4

1 に答える 1

2

それは不可能です。通常、ネットワーク接続やファイル ハンドルなどの不透明なデータ型をシリアル化することはできないため、送信することはできません。

可能であれば、セキュリティ リスクを考慮してください。悪意のあるクライアントがデータベースに完全にアクセスする可能性があります。

クライアント コードが特定のメッセージをサーバーに送信し、サーバーが適切なデータベース アクションを実行して結果を返す、ある種のインターフェイスを作成する必要があります (このインターフェイスを一般化しすぎないようにしてください)。悪意のあるクライアント コードがデータベースに対してランダムなクエリを実行できるようにします)。

于 2013-11-07T19:00:18.000 に答える