2017-12-16 1 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는 serverless 함수 호출이 아니라 약속에 할당 할 module.exports.handler을 필요로한다는 것이다.

나는이

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는 프록시에서 express 앱을 랩하고 lambda 매개 변수를 승인하는 함수를 리턴합니다.

그래서 여기에 내가 생각해 낸 것이 있습니다. 사실 꽤 잘 작동합니다.

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)) 
} 
관련 문제