比如说,我在一个项目中有很多动态生成的代码(例如mongoose的schema)。现在我希望把这些代码存到mongodb中,然后需要的时候再读出来并require。
也就是说,被require这段代码并不在实际的物理路径上,而是内存中或者数据库中。
我大概希望的是这样,类似下面的代码,js代码(doc.content)是存在mongodb中的,读取数据库,再require这段代码。
model.findOne({}, function(err, doc){
var mod = require(doc.content)
})
诸位,有什么好建议?
2 回复
给你看看下面的代码:
// node.js require js的处理
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
}
// coffee-script 增加到coffee的处理
loadFile = function(module, filename) {
var raw, stripped;
raw = fs.readFileSync(filename, 'utf8');
stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
return module._compile(compile(stripped, {
filename: filename,
literate: helpers.isLiterate(filename)
}), filename);
};
if (require.extensions) {
_ref = ['.coffee', '.litcoffee', '.coffee.md'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
ext = _ref[_i];
require.extensions[ext] = loadFile;
}
}
本质就是去扩展一下require方法,让它对某个特定的后缀作处理,node.js的代码在源码中的module.js,coffee的在coffee-script.js中,自己去参考一下。