【发布时间】:2019-10-08 02:54:51
【问题描述】:
我在用 node.js 做一些 AOP 时遇到了一点问题: 假设我在名为 server.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){
login(req,res);
module.exports.login_(req, res);
});
app.use(function(req, res, next){
res.setHeader('Content-Type', 'text/plain');
res.send(404, 'Page introuvable !');
});
function login(req, res){
res.setHeader('Content-Type', 'text/plain');
res.end('Page de login');
}
app.listen(1616);
如您所见,我想监控独特的功能login(req, res)。为了做到这一点,我想在另一个脚本中使用 AOP,但我能找到的一切——我认为这是由于 Javascript 语言的性质——暗示了大量的代码入侵。
有没有办法像在 Spring/Java 中一样执行 AOP?无需进行任何代码入侵?
目前,我的解决方案是这样的:
这是我们的一些代码入侵的应用程序
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){
//We need to use the function in module.exports
//--> code intrusion
//login(req,res);
module.exports.login_(req, res);
});
app.use(function(req, res, next){
res.setHeader('Content-Type', 'text/plain');
res.send(404, 'Page introuvable !');
});
function login(req, res){
res.setHeader('Content-Type', 'text/plain');
res.end('Page de login');
}
//We wrap here the function we want to monitor
wrappedLogin = function(req, res){
login(req, res);
}
module.exports = {
login_ : wrappedLogin
};
app.listen(1616);
这是我们的 AOP 脚本
var aop = require("node-aop");
//Include the server
var server = require('./server.js');
aop.before(server, "login_", function(key, value){
//I do some stuff here
});
aop.after(server, "login_", function(key, value){
//I do some stuff here
});
最后,我要做的就是
node aop.js
它有效,但正如您所见,存在一些代码入侵。我想摆脱它。有人知道吗?
【问题讨论】:
标签: javascript node.js aop