我正在编写一个基于 node.js 的服务器来管理一系列设备。基于 node.js 的服务器告诉连接的客户端它的能力。这些功能由单独的 js 文件定义,这些文件定义使用继承的对象util.inherits()
。
我遇到的问题是,现在,我必须为新能力定义一个新的 js,然后将主 js 程序更新为require
新的 js,更改代码以发布该能力可用,然后使用新能力,如果客户要求。
我想让主代码更通用,这样它可以
- 检测新能力,
- 自动包含它们,
- 通知客户,以及
- 利用代码。
我可以通过支持树浏览的各种 npm 模块进行检测,我可以为所有功能指定一个子目录并发现那里有哪些文件。我认为我可以require
用于第 2 步(尽管不是 100% 确定),但是我不知道如何执行第 3 步和第 4 步,或者将第 2 步的结果与第 3 步和第 4 步一起使用。
我会重视有关如何解决此问题的任何反馈。
澄清我的问题。现在我的逻辑如下:
var logicA = requires('./capabilities/a.js');
var logicB = requires('./capabilities/b.js');
var logicC = requires('./capabilities/c.js');
var Comms.CAPABILITY_A = 'a';
var Comms.CAPABILITY_B = 'b';
var Comms.CAPABILITY_C = 'c';
var Comms.MSG_CAPABILITY = 0;
var Comms.MSG_DO_LOGIC = 1;
function onMessageReceived(comms, msgId, body) {
switch (msgId) {
case(MSG_DO_LOGIC):
doLogic(body);
break;
...
}
}
function doLogic(flag) {
switch(flag) {
case(Comms.CAPABILITY_A):
logicA.doLogic();
break;
case(Comms.CAPABILITY_B):
logicB.doLogic();
break;
case(Comms.CAPABILITY_C):
logicC.doLogic();
break;
}
}
在客户端,我有硬编码逻辑来假设可用的内容。我可以通过让服务器向客户端发送一个功能数组来删除它,然后客户端可以选择数组中的一个元素并将其作为执行逻辑的请求传回。这不是我的问题。
我的问题是了解如何使主机程序动态加载所有逻辑,然后评估要在动态加载的逻辑上执行哪些逻辑。
我应该声明,当我说动态时,我的意思是可用的代码是在运行时确定的。但是,只有在服务器首次启动时才会执行评估。