1

私はMLab MongoDBとmongooseライブラリを使って、サーバレス(ラムダ)ハンドラの中でdb接続を作成しています。ローカルマシン上でスムーズに動作します。しかし、デプロイメント後には動作しないことがあります。リクエストは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

は、タイムアウトを増やしてX線のトレースを追加し、ビットが遅いかを調べます。ラムダが暖かい後、再びトレースを見てください。 –

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