2017-12-16 3 views
1

Ich versuche, serverless-http zu verwenden, um eine Expressanwendung für AWS Lambda bereitzustellen. Aber meine Anwendung erfordert einen Aufruf an eine init()-Funktion, die unter anderem die Routen lädt und dann ein Versprechen zurückgibt.So geben Sie ein Versprechen an serverless-http zurück

const serverless = require('serverless-http'); 
const Core = require('./core') 

module.exports.handler = Core.init(process.cwd()) 
.then(Core => serverless(Core.Server)) 
.catch(err => console.log(err)) 

Das Problem ist, dass serverless-http muss module.exports.handler zum serverless Funktionsaufruf und nicht das Versprechen zugewiesen werden.

Ich habe auch schon versucht, diese

const Core = require('./core') 

Core.init(process.cwd()) 
.then(Core => module.exports.handler = serverless(Core.Server)) 
.catch(err => console.log(err)) 

aber es macht Sinn, dass das funktioniert auch nicht.

Antwort

0

Kurze Antwort: "Sie können nicht". Basierend auf der source code der Bibliothek erwartet sie jedoch keinen Rückgabewert von handler. Sie können jedoch asynchrone Aufrufe ausführen, da der source code des Handlers finish anzeigt, dass er dem Antwort-Socket einen Ereignis-Listener hinzufügt.

0

Ja. Wie Siggy sagte, gibt es keine Möglichkeit, ein Versprechen direkt an den Export-Handler zurückzugeben. aber all serverless-http gibt eine Funktion zurück, die die Express-App in einen Proxy umbricht und die Lambda-Parameter akzeptiert.

Also hier ist, was ich gefunden habe. Funktioniert eigentlich ganz gut.

const serverless = require('serverless-http'); 
const Core = require('./core') 

module.exports.handler = function(evt, ctx, callback) { 
    Core.init(process.cwd()) 
    .then(Core => serverless(Core.Server)) 
    .then(proxy => proxy(evt, ctx, callback)) 
    .catch(err => console.log(err)) 
} 
Verwandte Themen