Mongodb Mongo连接偶尔会使lambda函数超时

Mongodb Mongo连接偶尔会使lambda函数超时,mongodb,lambda,aws-lambda,serverless-framework,serverless-architecture,Mongodb,Lambda,Aws Lambda,Serverless Framework,Serverless Architecture,我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建db连接。它在本地机器上运行平稳。但有时它在部署后不起作用。请求返回一个内部服务器错误。奇怪的是,有时它是有效的。但是如果我删除数据库连接代码,处理程序就会工作。无服务器日志只显示进程在完成请求之前退出。没有真正的错误,所以不知道该怎么办 数据库连接如下所示: handler.js // Connect to database mongoose.connect(process.env.DATABASE

我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建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));

这里也没有错误。知道发生了什么吗?

当您在完成请求之前退出
进程时,这意味着
节点
进程在Lambda能够调用
回调
之前已经崩溃。如果您转到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);
  })
};
下面详细说明lambda如何与node一起工作,以及如何实现DB连接的示例。
与@dashmug建议的不同,您不应该断开DB,因为每次连接都会降低性能。

增加超时时间,添加X射线跟踪,找出哪个位慢。然后在lambda变热后,再次查看跟踪。@TrentBartlem仍然没有帮助:-(连接不应该在处理程序中,使用后也不应该断开连接)。