【问题标题】:How to wrap javascript lambda handler function?如何包装javascript lambda处理函数?
【发布时间】:2020-05-17 15:51:33
【问题描述】:

我有几个用 Javascript 编写的 lambda 函数。有什么方法可以包装这些处理​​函数来执行一些常见的日志记录代码?

// handlers.js
export const emailHandler = (event, context, callback) => {
   email();
}

export const loginHandler = (event, context, callback) => {
   login();
}

类似这样的:

// genericHandler.js
export const genericHandler => (event, context, callback) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return emailHandler(event, context, callback) 
}

【问题讨论】:

  • 可能类似于:const logEvent = fn => (event, ...args) => { console.log(event); return fn(event, ...args); } 然后emailHandler = logEvent((event, context, callback) => { ... })

标签: javascript node.js aws-lambda wrapper


【解决方案1】:

您可以将一个函数作为参数传递给 JS 中的另一个函数。 所以,

// genericHandler.js
export const genericHandler => (called, event, context, callback) => {
   console.log('Event', event);
   // How can I also make this work for login handler?
   return called(event, context, callback) 
}

然后用通用处理程序替换对登录处理程序的调用。

genericHandler(emailHandler , event, context, callback);

更好的方法是为每个功能使用代理。退房 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

【讨论】:

    【解决方案2】:

    我认为这里的解决方案是将一些通用逻辑放在一个包/函数中,您可以在每个包/函数中使用它们。您不想将一个 Lambda 函数的代码包含在另一个函数中。您希望尽可能减少代码的大小,以便冷启动更快。当然,如果你的代码很小,它不会有很大的不同,但它有点反模式,将相同的代码封装在多个函数中,并根据代码的调用方式让代码做不同的事情。

    话虽如此,你总是可以在你的函数中包含多个入口点,然后传递一些东西来决定从那里调用什么,甚至传递你想要调用的函数。所以是这样的:

    export const emailHandler = (event, context, callback) => {
       genericHandler(event, context, callback, email);
    }
    
    export const loginHandler = (event, context, callback) => {
       genericHandler(event, context, callback, login);
    }
    
    export const genericHandler => (event, context, callback, function) => {
       console.log('Event', event);
       // How can I also make this work for login handler?
       return function(event, context, callback) 
    }
    
    const email = (event, context, callback) => {
    // email code
    }
    
    const login = (event, context, callback) => {
    // login code
    }
    
    

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 2016-05-17
      • 2019-06-02
      • 2018-10-09
      • 2010-09-24
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多