在Nodejs中的模块之间共享对象的好的模式是什么?

时间:2018-10-28 03:58:03

标签: node.js

我的情况是我正在使用Websocket,并且只有一台Websocket服务器,并且许多方法需要从服务器获取数据并修改服务器上的内容,例如删除不活动的套接字等。

现在,我只是通过函数调用和包装器函数传递服务器实例,这变得乏味并且容易出错(所有循环依赖项,错别字等)

导入服务器实例会导致循环依赖。

将它们传递给参数会导致过多的相互依赖性。

例如:

onConnection -> attaches events 

onMessage = msgHanlder(server);
...

然后在msgHandler中有多个事件要处理

onNewMsg = newMsg(server)
onDelete = delete(server)
onRequest = request(server)

这是一种非常实用的样式编程,但是太麻烦了。

1 个答案:

答案 0 :(得分:0)

创建一个缓存模块(get,set方法),并要求该模块管理您在不同模块之间的状态。

cache.js

async function checkForDuplicateRecord(requestTo) {
    let errors = "";
    try{
        // do not allow duplicate requests
        let record = await FriendRequest.findOne({
                requestTo: requestTo
            });
        if (record) {
            errors += "{'\n'}You have already sent this person a friend request.";
            console.log(record);
        }
    }
    catch(e){
        errors += "{'\n'}Server Errors.";
    }
    return errors
}

a.js

let _cache = {};
module.exports = {
  "get":function(key){
     return _cache[key];
   },
  "set":function(key,value){
     _cache[key] = value;
    }
}

b.js

const cache = require('./cache');
const b = require('./b');
cache.set('a','value set in a');
b.invoke();