Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在mongodb中保存未知JS对象的字符串表示形式_Node.js_Mongodb_Sockets - Fatal编程技术网

Node.js 在mongodb中保存未知JS对象的字符串表示形式

Node.js 在mongodb中保存未知JS对象的字符串表示形式,node.js,mongodb,sockets,Node.js,Mongodb,Sockets,我正在程序中保存连接/套接字对象,如下所示: var clients = []; net.createServer(function (socket) { clients.push(socket); //morecode... 稍后的代码中,我使用该数组来广播消息: function broadcast(message, sender) { clients.forEach(function (client) { client.write(message)

我正在程序中保存连接/套接字对象,如下所示:

var clients = [];
net.createServer(function (socket) {
    clients.push(socket);
    //morecode...
稍后的代码中,我使用该数组来广播消息:

function broadcast(message, sender) {
    clients.forEach(function (client) {
        client.write(message);
    });
}
到目前为止非常简单。现在,我想将socket变量保存在mongodb服务器中,以便可以从服务器应用程序的不同实例访问它。我的第一个方法是:

var client = new Client({
    name: socket.remoteAddress + ":" + socket.remotePort,
    socket: JSON.stringify(socket)
});

client.save(function (err) {
    if (err)
        console.log(err);
}); 
但我得到了:TypeError:将循环结构转换为JSON 我从SO中的一个类似问题中得到的一个建议是使用,这样我就可以保存套接字变量的字符串表示形式:

控制台日志(套接字)

console.log(util.inspect(socket))

{socket:'套接字{\n\u正在连接: false,\n\u HADEROR:false,\n\u句柄:\n TCP{\n
_外部流:{},\n fd:14,\n reading:true,\n owner:[循环],\n onread:[函数:onread],\n onconnection: 空,\n writeQueueSize:0},\n\u父项:空,\n\u主机:空,\n _readableState:\n readableState{\n objectMode:false\n highWaterMark:16384\n buffer:[],\n length:0\n管道: null,\n管道提示:0,\n流动提示:null,\n结束提示:false,\n 提交:错误,\n读取:正确,\n同步:错误,\n
needReadable:true\n emittedReadable:false\n
可读侦听:错误,\n恢复计划:错误,\n
defaultEncoding:\'utf8\',\n范围:false,\n范围:0,\n readingMore:false,\n解码器:null,\n编码:null},\n 可读:true,\n域:null,\n\u事件:\n{end:{[函数: g] 侦听器:[函数:onend]}\n完成:[函数: onSocketFinish],\n\u socketEnd:[函数:onSocketEnd]},\n _EventScont:3\n\u maxListeners:undefined\n\u writableState:\n writableState{\n objectMode:false\n highWaterMark:16384\n needDrain:false,\n ending:false,\n ended:false,\n
已完成:false,\n解码字符串:false,\n默认编码: \“utf8\”,\n长度:0,\n书写:假,\n软木塞:0,\n
同步:真,\n缓冲处理:假,\n写入: [函数],\n writeb:null,\n writelen:0,\n
bufferedRequest:null\n lastBufferedRequest:null\n
pendingcb:0,\n预完成:false,\n错误发出:false},\n 可写:true,\n AllowAlfOpen:false,\n已销毁:false,\n 字节读取:0\n\u字节发送:0\n\u sockname:null\n _pendingData:null\n\u PendingCodeing:\'\',\n服务器:\n服务器{\n域:null\n\u事件:{连接:[函数]},\n
_eventsCount:1,\n\u maxListeners:未定义,\n\u连接:1,\n\u句柄:\n TCP{\n\u外部流:{},\n
fd:12,\n读数:假,\n所有者:[循环],\n
onread:null\n onconnection:[函数:onconnection],\n
writeQueueSize:0},\n\u使用从属:false,\n\u从属:[],\n
_unref:false、\n AllowAlfOpen:false、\n pauseOnConnect:false、\n\u连接键:\'6:::5000\'}、\n\u对等名称:{地址: \“::ffff:XXXXXXX\”,系列:\'IPv6\,端口:1145},\n'}

在这种形式下,我可以将其保存到mongodb,但我不知道如何将其重新转换为socket对象NodeJ可以使用来解决
类型错误:将循环结构转换为JSON
,转换为自定义
JSON。stringify
如下

var cache = [];
var obj = JSON.stringify(sock, function(key, value) {
    if (typeof value === 'object' && value !== null) {
        if (cache.indexOf(value) !== -1) {
            // Circular reference found, discard key
            return;
        }
        // Store value in our collection
        cache.push(value);
    }
    return value;
});
cache = null; // Enable garbage collection

console.log(obj);
因此,通过
JSON.parse

console.log(JSON.parse(obj));
要解决
TypeError:将循环结构转换为JSON
,转换为自定义
JSON.stringify
,如下所示

var cache = [];
var obj = JSON.stringify(sock, function(key, value) {
    if (typeof value === 'object' && value !== null) {
        if (cache.indexOf(value) !== -1) {
            // Circular reference found, discard key
            return;
        }
        // Store value in our collection
        cache.push(value);
    }
    return value;
});
cache = null; // Enable garbage collection

console.log(obj);
因此,通过
JSON.parse

console.log(JSON.parse(obj));

我怀疑这是可能的
net.Socket
使用TCP套接字,您基本上希望两个不同的进程同时使用同一个套接字。您找到解决方案了吗?我怀疑这是可能的<代码>网络套接字使用TCP套接字,您基本上希望两个不同的进程同时使用同一个套接字。您找到解决方案了吗?这不起作用,因为您在解析此类对象后返回的对象不再是套接字对象。这不起作用,因为您在解析此类对象后返回的对象不再是套接字对象。