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
的所有调用放在同一列上),它看起来有点像一个表,并且易于阅读。不过,这可以通过编程完成,我将编辑上面的问题,这很好。但我必须从名称空间导出函数。是否有其他从命名空间导出对象的解决方案?