通过 socket.io 将 Mongo 连接传递给 JQuery 代码

Passing a Mongo connection to JQuery code via socket.io?

本文关键字:JQuery 代码 连接 socket io Mongo 通过      更新时间:2023-09-26

我正在尝试在我的节点.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"值在另一边为空。可以这样发送吗?

这是不可能的:您通常无法序列化,因此无法传输不透明的数据类型,例如网络连接或文件句柄。

如果可能的话,请考虑安全风险:恶意客户端将完全访问您的数据库。

您将不得不创建某种接口,其中客户端代码将某些消息发送到服务器,服务器执行适当的数据库操作并发回结果(同样,请确保不要使此接口过于通用,以便恶意客户端代码可以对数据库执行随机查询)。