我目前正在开发一个 node.js 项目,该项目需要在运行时和运行时生成和更改内存中的对象。我知道这听起来令人困惑,所以这里有一个例子。
周一上午 10 点:
var PI = Math.PI;
exports.area = function (r) {
return PI * r * r;
};
周一上午 11 点:
var PI = Math.PI;
var minSize = 10;
exports.area = function (r) {
if (r >= minSize) {
return PI * r * r;
} else {
return "Error: Minimum size not met.";
}
};
周一中午 12 点:
var PI = Math.PI;
var minSize = 10;
var msg = "Error: Minimum size of " + minSize + "not met.";
exports.area = function (r) {
if (r >= minSize) {
return PI * r * r;
} else {
return msg;
}
};
周二上午 10 点:
var PI = Math.PI;
var minSize = 15;
var error['eng'] = "Error: Minimum size of " + minSize + "not met.";
var error['chn'] = "錯誤:不符合最小尺寸:" + minSize + "。"
exports.area = function (r) {
if (r >= minSize) {
return PI * r * r;
} else {
return error;
}
};
exports.circumference = function (r) {
if (r >= minSize) {
return 2 * PI * r;
} else {
return error;
}
};
这是一个人为的例子,因为大多数更改可以通过适当的计划避免,我知道,但这有点说明了这一点。该模块在变量和函数中不断变化,在服务器运行时扩展。
以下是我的限制:
- 使用原型继承(没有关键字“new”)
- 更改在下次调用函数时生效
- 更改包括添加新变量和函数
- 需要保存更改以重新启动服务器
- 无法使用 eval()
我想到了两种可能的策略:
使用 .prototype,继续添加/更改函数和变量。
- 优点:能够在服务器运行时执行此操作
- 缺点:我不确定如何将其保存到文件中。据我所知,如果不以某种方式使用 eval(),我无法将函数保存到文件中
直接编辑文件并通过类似node-supervisor的方式重新加载它们。
- 优点:更改将被保存,版本可以保存并恢复到
- 缺点:我认为使用 eval() 直接编辑文件或多或少会产生相同的后果,即,如果有人偷偷溜出恶意软件,系统可能会崩溃。
这就是我现在能想到的。将不胜感激这方面的任何意见或选择。