Node 6.10を使用してAWS LambdaでES6クラス構文を使用したいのですが、機能しません。
class widget {
constructor(event, context, callback) {
callback(null, `all seems well!`);
}
}
// module.exports.handler = widget; // "Process exited before completing request"
module.exports.handler = new widget(); // "callback is not a function"
クラス構文を使用して成功した人はいますか?クラスコンストラクターは、明らかにハンドラー関数とは見なされません。
Lambdaが期待するAPIに従っていない。 ドキュメントに記載されているように 、それは期待しています
exports.myHandler = function(event, context, callback) {};
それはそれから呼び出す
const handlers = require('your-module');
handlers();
ここでの問題は、ES6クラスをnew
で作成する必要があることです。 Lambda APIは関数を想定していると言っているため、構築可能な関数ではなく、呼び出し可能な関数を想定しています。クラスを使用する場合は、関数をエクスポートする必要があります。
class widget {
constructor(event, context, callback) {
callback(null, `all seems well!`);
}
}
exports.myHandler = function(event, context, callback) {
new widget(event, context, callback);
};
はい、あなたの質問に答えるために、Node 6 Lambda関数でES6クラスを使用できます。ただし、このコードは機能しません。
ラムダハンドラーはクラスでnew
を呼び出さないため、単に渡してもコンストラクターは起動しません
_module.exports.handler = widget;
_
widget(event, context, callback)
を呼び出します。渡す前にnew
を呼び出すと、ハンドラからのコールバック参照がまだありません。基本的に、初期化された値のない新しいオブジェクトを作成しています。 new widget()
を呼び出していますが、何も渡しておらず、ハンドラーが呼び出すこの新しいインスタンスを渡しています。
これを行う理由は(私が知る限り)地球上にはありませんが、あなたはできません:
_class widget extends Function {
constructor(){
super('...args', 'return this.__call__(...args)');
return this.bind(this);
}
__call__(event, context, callback) {
callback(null, "Dude, this is wierd.")
}
}
exports.handler = new widget()
_