用node js动态导出函数
Dynamically exports functions with node js
几天前我开发了一个脚本来监控node js应用程序。错误之处在于,我必须手动导出我想要监视的每个函数。例如,下面是我想监视的一段代码:
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.setHeader('Content-Type', 'text/plain');
res.end('Home');
});
app.get('/login', function(req, res){
//On doit remplacer les appels de fonctions monitorées
//par le module.exports.fonction
//login(req,res);
exports.instrument_login(req, res)
});
function login(req, res){
res.setHeader('Content-Type', 'text/plain');
res.end('Page de login');
}
exports.instrument_login = login;
app.listen(1616);
我现在要做的就是导出登录功能。然后,我的脚本将把一些AOP与它关联起来,我将能够获得执行时间和吞吐量。
但是,如您所见,我必须使用导出。将login(req, res)替换为instrument_login(req, res)通过直接列出应用程序脚本中的每个函数,然后将其关联到AOP函数,我可以避免这种代码替换。但是,我就是想不明白。
是否有可能做某种循环去通过每个函数在应用程序脚本?
像这样:
Object.keys(object).sort(function( a, b ) {
return a.localeCompare( b );
}).forEach(function( element, index, array ) {
console.log(element);
});
但是,而不是对象我会传递对象在Node JS包装每个函数?
如果您想要避免编写exports.foo = bar;
行,则可以像这样定义导出:
module.exports = {
instrument_login: function(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end('Page de login');
},
// other functions ...
};
如果你不能控制代码,你可以使用JS的AST模块,比如esprima (npm上有很多其他模块提供类似的AST遍历功能)。
这将允许您解析javascript并查找函数。然后,只需将exports.<functionName> = <functionName>;
行附加到脚本末尾就很简单了。然后,您可以将结果保存到新文件或覆盖原始文件,如果您想要能够require()
修改的代码。否则,您可以使用vm模块模拟require()
,执行修改后的代码,并获得导出的函数。
相关文章:
- 将jquery函数动态应用于添加的元素
- 在剑道网格中,我可以用一个函数动态设置列属性吗
- JQuery将字符串识别为函数动态回调
- 如何将变量与函数动态绑定
- 如何将函数动态附加到对象
- 如何通过函数动态更改文档标题
- 将泛型函数动态关联到对象属性时的作用域.(模块模式)
- 如何使用 javascript 中的替换函数动态替换图片 src
- 如何为每个函数动态绑定“this”
- 为带变量的函数动态添加事件侦听器
- 尝试使用 jQuery - 自定义函数动态验证字段
- 使用 onclick 函数动态添加表行
- 如何使用函数动态定义javascript事件处理程序
- 通过Javascript函数动态创建一个表并向表中添加单元格
- Javascript调用函数-动态变量名
- 使用javascript函数动态更新PayPal货币和金额字段
- 如何使用模型中的函数表达式将函数动态绑定到ng-click
- 你能给函数动态添加局部变量吗
- Javascript使用一个函数动态计算多行
- 如何在选择值作为另一个选择的函数动态加载时不使用ctrl键选择多个值