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 回答