这个问题可能听起来很愚蠢或有点过于简单,但我严重陷入困境。
我有一个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}
答案 0 :(得分:0)
好吧,您可以先定义一个客户端模块。
//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
对象。