J'essaie d'utiliser AWS Lambda avec des classes ECMA6 à Nodejs. Actuellement, mon code ressemble à ceci (version simplifiée de ce que je veux vraiment faire):
{ "errorMessage": "Cannot read property 'str' of undefined", "errorType": "TypeError", "stackTrace": [ "handler (/var/task/index.js:9:24)" ] }
4 Réponses :
Vous pouvez exporter la méthode elle-même comme votre gestionnaire.
module.exports.handler = new testClass('test').handler;
Mais seule la fonction de gestionnaire serait exportée, mais j'ai besoin de la classe entière exportée, car d'autres fonctions seront également utilisées (pour des trucs de pré-déploiement)
Je viens de le faire essayer et cela ne fonctionne pas non plus. Il échoue avec le même message d'erreur comme lors de l'exportation de la classe entière
@Moamen édité pour le réparer.
Malheureusement, je n'ai pas montré de solution pour cela de manière ECMA6. En fait, cela fonctionne comme j'en ai besoin si je passe à la voie de l'ancienne et utilisez une fonction à la place:
function testClass(str) { const res = {}; const input = str; res.handler = async (event) => { return { statusCode: 200, body: input, }; }; return res; } module.exports = testClass('test');
suivi fonctionnera mais que vous ne retournez rien pour que vous verrez NULL dans la réponse.
class testClass { constructor(str) { this.str = str; } async handler(event) { return { statusCode: 200, body: this.str, }; } } module.exports.handler = async (event) => { const test = new testClass('test'); return await test.handler(event); };
Vous pouvez utiliser une fonction statique à l'intérieur d'une classe ES6, AWS attendez-vous à une fonction avec un paramètre de rappel que Wikl soit exécuté. Avec la réponse, si vous passez une méthode de classe, sans instancier la classe, il ne fonctionnera pas, c'est pourquoi vous devez utiliser des fonctions statiques, de cette façon: btw la fonction doit être dans la console AWS Lambda, vous spécifiez la fonction comme suit: < Code> file_name.function_name code>, dans ce cas ASYNC CODE>, qui est le comportement équivalent au rappel qui est transmis dans la fonction p> p>
myawesomeclassLambda.myawesomeclassfunction code> p> p> p>
Pourquoi voudriez-vous cela cependant?
Ceci est juste une version simplifiée du code, dans le code réel, les exportations de la classe sont également plus utilisées par d'autres modules pour des trucs de pré-déploiement