我正在尝试将 AWS lambda 与 nodejs 中的 ECMA6 类一起使用。目前我的代码看起来像这样(我真正想做的简化版本):
class testClass {
constructor(str) {
this.str = str;
}
async handler(event) {
return {
statusCode: 200,
body: this.str,
};
}
}
module.exports = new testClass('test');
当在本地测试时
const testClass = require('./testClass');
const result = await testClass.handler();
它按预期工作,但是当我将它添加到 lambda 函数并调用它时,它返回
{
"errorMessage": "Cannot read property 'str' of undefined",
"errorType": "TypeError",
"stackTrace": [
"handler (/var/task/index.js:9:24)"
]
}
因此,似乎没有在 lambda 上下文中调用类的构造函数。知道为什么会这样以及如何解决这个问题吗?
您可以在 es6 类中使用静态函数,AWS 需要一个带有回调参数的函数,该函数将被执行。对于响应,如果您传递一个类方法,而不实例化该类,它将无法工作,这就是您应该使用静态函数的原因,如下所示:
// MyAwesomeClassLambda.js
class MyAwesomeClassLambda {
static async myAwesomeClassFunction(event) {
// return await someAsyncMethodLikeDataBaseCallOrSomethingLikeThat()
return { message: 'hello world' }
}
}
module.exports = MyAwesomeClassLambda
顺便说一句,该函数必须是async
,这是与function
版本中传递的回调等效的行为
在 AWS Lambda 控制台中,您必须将函数指定为:file_name.function_name
,在本例中MyAwesomeClassLambda.myAwesomeClassFunction
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句