gpt4 book ai didi

javascript - 用node js动态导出函数

转载 作者:行者123 更新时间:2023-11-28 08:05:19 27 4
gpt4 key购买 nike

几天前我开发了一个脚本来监控 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 关联到它,我将能够获取执行时间和吞吐量。

但是,正如您所看到的,我必须使用 exports.instrument_login(req, res) 而不是 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())修改后的代码。否则你可以模仿 require()使用vm模块,执行修改后的代码,并获取导出的函数。

关于javascript - 用node js动态导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com