javascript - 如何包装 javascript lambda 处理函数?

标签 javascript node.js aws-lambda wrapper

我有几个用 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) 
}

最佳答案

我认为这里的解决方案是将一些通用逻辑放入一个包/函数中,您可以在每个包/函数中使用它们。您不希望将一个 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
}

关于javascript - 如何包装 javascript lambda 处理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012997/

相关文章:

node.js - 使用带有 bunyan 的 stackdriver 日志记录时,即使在 gcp 的 vm 实例内部也会出现 PERMISSION_DENIED 错误

mysql - Sequelize MySQL Migration - 唯一为 false

python - AWS/Python Lambda 函数检查是否存在查询字符串

javascript - 使用 javascript、angular.js 和 sql.js,如何从 url 获取文件对象?

javascript - 使用管道和订阅时我的加载 Controller 放在哪里?

javascript - 有没有更好的方法使用javascript实现二十一点标准规则?

mysql - AWS Lambda 和 RDS 工作示例(需要它与 Sequelize 一起使用)

javascript - HTML5 自顶向下赛车游戏

javascript - 我们可以将 PDF 文件从 AngularJS 客户端发送到 NodeJS 服务器吗

python - modify_instance_attribute() 只接受关键字参数