我目前正在开发一个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;
}
};
这是一个人为的例子,因为我知道,大多数变化都可以通过适当的规划来避免,但这有点说明了这一点。该模块在变量和函数方面都在不断变化,在服务器运行时进行扩展。
以下是我的限制:
我想到了两种可能的策略:
使用.prototype,继续添加/更改函数和变量。
直接编辑文件并通过node-supervisor等方式重新加载文件。
我现在所能想到的一切。非常感谢这方面的任何意见或选择。
答案 0 :(得分:0)
供将来参考:
结论:在沙盒的范围内存储函数并安全地执行它们并非不可能,它只是不太实用。
替代解决方案:如果函数本身不是太复杂,那么以DSL的形式存储调用并不是不可能的,并在之后解析它们。