javascript - 如何为导出多个函数的模块编写中间件逻辑

标签 javascript ecmascript-6 typescript2.0 es6-modules

我有一个导出几个函数的模块。我想为该模块编写一个中间件。因此,当调用该模块的任何导出函数时,我希望中间件首先执行并决定是否应该执行预期的函数。
我正在使用 typescript 并考虑导出执行相同方法的模块,如下所示:

export {
foo: middleware
bar: middleware
baz: middleware
}

这可能不是编写中间件的正确方法。您能建议更好的方法吗?

最佳答案

最简单的方法是显式包装您的函数。在 ES6 中(应该可以直接移植到 Typescript):

export default {
    foo: wrapMiddleware(fooMiddleware),
    bar: wrapMiddleware(barMiddleware)
}

wrapMiddleware() 看起来像这样:

function wrapMiddleware(originalFunc) {
    return function(...args) {
        // Example:
        if (condition) {
            return originalFunc(...args)
        } else {
            return null
        }
    }
}

您也可以通过编程方式执行此操作。例如:

let exports = { foo, bar }

for (let key in exports) {
    exports[key] = wrapMiddleware(exports[key])
}

关于javascript - 如何为导出多个函数的模块编写中间件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485506/

相关文章:

javascript - JavaScript 是否保留对数组中变量的引用?

javascript - 在 Javascript ES5 和 ES6 中 Function 对象的调用和 apply 方法的上下文中,use strict 如何影响 this 关键字

angular - 使用 typescript 的 HTTP POST 请求失败,响应在 Angular 2 中为空值

typescript - TypeScript 可选类型与类型的区别 |不明确的

javascript - 使用 Jquery 的 .closest 访问音频元素不起作用?

javascript - 注入(inject)依赖angularMoment返回错误

javascript - 即使服务器/客户端位于同一时区,日期输入提要也是错误的

javascript - 如何使用 Typescript 中的方法从远程 js 文件动态扩展类?

javascript - execCommand "insertBrOnReturn"是如何工作的?

javascript - Galleriffic 灯箱