2017-12-16 4 views
1

serverless-httpを使用して、明示的なアプリケーションをAWSラムダにデプロイしようとしています。しかし、私のアプリケーションでは、他のものの中でルートをロードして約束を返す、init()関数への呼び出しが必要です。約束をserverless-httpに返す方法

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)) 

問題は、サーバレス-HTTPはmodule.exports.handlerserverless関数呼び出しではなく約束に割り当てられる必要があるということです。

また、私はこの

const Core = require('./core') 

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

を試してみましたが、それはそれはどちらか動作しないという意味になります。

答えて

0

短い答え: "できません"。しかし、ライブラリのsource codeに基づいて、handlerから返される値はありません。しかし、finishハンドラのsource codeが応答ソケットにイベントリスナを追加することを示しているので、非同期呼び出しを行うことができます。

0

はい。 Siggy氏によると、エクスポートハンドラに約束を直接返す方法はありません。しかし、serverless-httpはすべて、エクスプレスアプリをプロキシでラップし、ラムダパラメータを受け入れる関数を返します。

ここに私が思いついたのがあります。実際にはかなりうまく動作します。

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)) 
} 
関連する問題