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

Javascript 如何为导出多个函数的模块编写中间件逻辑,javascript,ecmascript-6,typescript2.0,es6-modules,Javascript,Ecmascript 6,Typescript2.0,Es6 Modules,我有一个模块,可以导出一些函数。我想为模块编写一个中间件。因此,当调用从该模块导出的任何函数时,我希望中间件首先执行并决定是否应该执行预期的函数。 我正在使用typescript,并考虑导出执行以下相同方法的模块: export { foo: middleware bar: middleware baz: middleware } function wrapMiddleware(originalFunc) { return function(...args) { //

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

export {
foo: middleware
bar: middleware
baz: middleware
}
function wrapMiddleware(originalFunc) {
    return function(...args) {
        // Example:
        if (condition) {
            return originalFunc(...args)
        } else {
            return null
        }
    }
}

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

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

wrapMiddleware()
如下所示:

export {
foo: middleware
bar: middleware
baz: middleware
}
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])
}

扩展@slezica答案。es6导出是静态的,所以对于如何导出依赖项以及需要在创建时列出的内容,您不能太有创造性。如果您使用commonJS,您可以导出对象,这将为您提供更大的导出灵活性,并且您可以执行以下操作(忽略函数方法,这只是编码样式。这可以通过多种方式实现)

```

```


但是如果你坚持使用es6模块,你就不能这样做,所以你必须在导出之前对它们进行包装。如果我有10个或更多的方法要导出,你认为为所有这些编写中间件是更好的方法吗?我认为这是更干净的方法,即使它会导致一些看起来相同的代码。如果您垂直对齐代码(将对
wrapMiddleware
的所有调用放在同一列上),它看起来有点像一个表,并且易于阅读。不过,这可以通过编程完成,我将编辑上面的问题,这很好。但我必须从名称空间导出函数。是否有其他从命名空间导出对象的解决方案?