2017-01-30 3 views
0

람다의 microservice-HTTP-엔드 포인트 스타터 기능 함수 끝에 다음 코드를 포함하는 함수 : 몇 엔드 포인트와 람다 전용 API를 작성 후AWS 람다 할 콜백() 노드

const done = (err, res) => callback(null, { 
    statusCode: err ? '400' : '200', 
    body: err ? err.message : JSON.stringify(res), 
    headers: { 
     'Content-Type': 'application/json', 
    }, 
}); 

를 I 내 모든 기능에서이 동일한 코드로 자신을 발견했습니다. 내 첫 번째 본능은이 코드를 더 많은 코드로 만들려는 코드인데 DRY을 입력하면 callback() 함수가 범위를 벗어납니다.

필자는 JSON을 내 함수에서만 반환하므로이 함수가 특정 사용 사례의 유일한 Content-Type이 될 수 있습니다.

사람들은 어떻게 처리합니까? 이 코드를 어떻게 든 캡슐화하는 실용적인 (그리고 우아한) 방법이 있습니까? 아니면 더 나은 대안일까요?

+0

그냥 설정'global.callback = callback' 당신의 람다 핸들러 함수의 첫 번째 줄에 한 다음과 같은 절대로 범위를 벗어나지 않을 것입니다. – idbehold

+0

@idbehold이 메시지를 global로 보내면 iffy가 느껴집니다. 특히 "콜백"과 같은 일반적인 것. – Julian

+0

하지만 람다 컨테이너 인스턴스는 핸들러를 한 번에 하나씩 만 실행합니다. 람다 (Lambda) 함수를 호출 한 다음 첫 번째 완료 전에 같은 람다 함수를 두 번 호출하려고하면 두 번째 호출에서 새로운 컨테이너가 실행됩니다. 핸들러 함수가 끝나면 (또는 시간 초과 됨) 컨테이너를 다시 사용할 수 있습니다. 따라서 세계는 람다 함수의 맥락에서 중요하지 않습니다. 'global.MY_SUPER_SECRET_CALLBACK = callback'을 좋아한다면 항상 글로벌 네임을 좀 더 구체적으로 변경할 수 있습니다. – idbehold

답변

0

그냥 둥지 기능 :

const regularize = (awsCallback) => (err, res) => { 
    awsCallback(...perYourAboveCode(err, res)) 
}; 

핸들러는 다음과 같이 수 :

const myHandler = (event, context, awsCallback) => { 
    const callback = regularize(awsCallback); 
};