1

나는 serverless (Lambda) 핸들러 내부에서 DB 연결을 만들기 위해 MLab MongoDB와 mongoose 라이브러리를 사용 해왔다. 로컬 컴퓨터에서 원활하게 작동합니다. 하지만 배포 후 작동하지 않는 경우가 있습니다. 요청은 Internal server error을 반환합니다. 이상한 것은 때로는 효과가 있습니다. 그러나 데이터베이스 연결 코드를 제거하면 처리기가 작동합니다. 서버가없는 로그에는 Process exited before completing request이 표시됩니다. 진짜 오류가 없으므로 어떻게해야할지 모릅니다.Mongo 연결은 가끔 람다 함수의 타임 아웃을 만든다.

DB를 연결은 다음과 같습니다 handler.js

// Connect to database 
mongoose.connect(process.env.DATABASE_URL, { 
    useMongoClient: false 
}).then((ee) => { 
    console.log('------------------------invoke db ', ee); 
}) 
    .catch(err => console.error('-----------error db ', err)); 

도 여기에 오류. 어떤 생각인지 알 겠어?

+0

는 타임 아웃을 증가 엑스레이 추적을 추가, 조금 느린있는 알아보십시오. 그런 다음 람다가 따뜻해지면 다시 추적을 관찰하십시오. –

+0

@TrentBartlem 여전히 도움이되지 않았다 :-( – THpubs

답변

2

Process exited before completing request을 얻으면 람다가 callback을 호출하기 전에 node 프로세스가 중단되었음을 의미합니다. Cloudwatch 로그로 이동하면 오류 및 스택 추적이 발생했습니다.

핸들 안에 MongoDB 인스턴스 에 연결하고 callback()을 호출하기 전에 먼저 연결을 끊어야합니다. 그것은 같은 것

...

exports.handler = (event, context, callback) => { 
    let response; 

    return mongoose.connect(process.env.DATABASE_URL, { 
    useMongoClient: false 
    }).then((ee) => { 
    // prepare your response 
    response = { hello: 'world' } 
    }).then(() => { 
    mongoose.disconnect() 
    }).then(() => { 
    // Success 
    callback(null, response) 
    }).catch((err) => { 
    console.error(err); 

    callback(err); 
    }) 
};