gpt4 book ai didi

javascript - 动态地将对象存储在对象中

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:15 25 4
gpt4 key购买 nike

这个问题可能听起来很愚蠢或者有点太简单,但我真的被困住了。

我有一个 Node.js 应用程序,需要存储客户端以便能够将信息从特定客户端发送到特定的其他客户端。

var clients = { };

var chat = io.of('/chat')
.on('connection', function(socket) {
socket
.on('ehlo', function(data) {
// mysql queries here etc to get client's data,
// for example session_id, customer name, ...

// got stuck here, need to save the socket in customers object like:
clients.(customer + data.get_customer_id) = { socket: socket };

我稍后需要能够从不同的范围等访问此属性。

基本上我不知道如何实现这些抽象方法:

clients.addClient({ id: 123, socket: socket});

然后通过以下方式找到它们:

x = clients.findById(123);
// x now should be { id: 123, socket: socket}

最佳答案

那么,您可以先定义一个客户端模块。

//clients.js
"use strict";

var clients = {
_db: []
};

clients.findById = function(id){
for(var i=0; i < this._db.length; i++){
var client = this._db[i];
if(client.id === id){
return client;
}
}
return null;
};

clients.addClient = function(client) {
if(!this.findById(client.id)){
this._db.push(client);
}
};

module.exports = clients;

Node.js 的工作方式是在初始化后缓存你的模块。这是您第一次使用后的情况。这意味着每次您需要它时,您都会获得相同的 clients 对象。现在您可以在假设的 module1.js 中执行此操作:

//module1.js
var clients = require('./clients');
clients.addClient(newClient);

稍后在另一个模块中,您可以访问相同的数据结构:

//module2.js
var clients = require('./clients');
var client = clients.findById(id);

就是这样,您可以从不同的上下文访问相同的数据结构。这里的要点是所有模块将共享相同的 clients 对象。

关于javascript - 动态地将对象存储在对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23981012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com