Nodejs 我想给function加上after与before事件,有这方面的npm么?

Nodejs 我想给function加上after与before事件,有这方面的npm么?

例如: file: feedback.js;

exports.feedback = function(){};

我希望可以这样:

var feedback = require('./feedback');
feedback.feedback.bind("after", function(){});
feedback.feedback.bind("before", function(){});

这样,当feedback()被调用的时候,就会触发after与before,大概就是想实现这样的触发功能,有没有现成的模块?


2 回复

要实现类似 beforeafter 事件的功能,你可以使用一些现有的 npm 模块。其中一个非常流行的模块是 hookfn,它可以让你在函数执行之前和之后插入自定义逻辑。

首先,你需要安装 hookfn 模块:

npm install hookfn

然后,你可以使用它来实现你的需求。下面是一个具体的示例代码:

示例代码

假设你有一个 feedback.js 文件,其中包含一个 feedback 函数:

// file: feedback.js
const hookfn = require('hookfn');

exports.feedback = function() {
    console.log("Feedback function is running...");
};

接下来,你可以在另一个文件中使用 hookfn 来绑定 beforeafter 事件:

// file: main.js
const feedback = require('./feedback');
const hookfn = require('hookfn');

const originalFeedback = feedback.feedback;

feedback.feedback = hookfn(originalFeedback, {
    before: () => {
        console.log("Before feedback function execution");
    },
    after: (result) => {
        console.log("After feedback function execution:", result);
    }
});

// 调用 feedback 函数
feedback.feedback();

解释

  1. 引入 hookfn:我们从 hookfn 模块中引入了 hookfn 函数。
  2. 保存原始函数:我们将原始的 feedback 函数保存在一个变量中,以便稍后传递给 hookfn
  3. 使用 hookfn 包装函数:我们使用 hookfn 将原始的 feedback 函数包装起来,并提供 beforeafter 回调函数。
  4. 调用函数:最后,当我们调用 feedback() 函数时,会先执行 before 回调,然后执行原始函数,最后执行 after 回调。

通过这种方式,你可以轻松地在函数执行前后添加自定义逻辑,而无需修改原始函数的实现。


你可以使用 hook 这个 npm 包来实现 beforeafter 的功能。这个包允许你在函数执行前(before)和执行后(after)插入自定义逻辑。

首先,你需要安装 hook 模块:

npm install hook

然后,你可以使用 hook 来实现你的需求:

const hook = require('hook');

exports.feedback = function() {
    console.log('Feedback function called!');
};

// 使用 hook 对 feedback 函数进行包装
hook.before(exports, 'feedback', function(callback) {
    console.log('Executing before feedback function.');
    callback();
});

hook.after(exports, 'feedback', function() {
    console.log('Executed after feedback function.');
});

使用时,只需要直接调用 feedback 函数即可:

require('./feedback').feedback();

运行上述代码,你会看到以下输出:

Executing before feedback function.
Feedback function called!
Executed after feedback function.

这样,你就可以在 feedback 函数执行前后添加自定义逻辑了。

回到顶部