4

我一直在使用 MLab MongoDB 和 mongoose 库在无服务器 (Lambda) 处理程序中创建数据库连接。它可以在本地机器上顺利运行。但有时它在部署后不起作用。请求返回一个Internal server error. 奇怪的是有时它会起作用。但是如果我删除数据库连接代码,处理程序就会工作。无服务器日志只是说Process exited before completing request。没有真正的错误,所以不知道该怎么做。

数据库连接如下所示: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));

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

4

2 回答 2

3

当你得到Process exited before completing request时,这意味着node在 Lambda 能够调用之前进程已经崩溃callback。如果您访问 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);
  })
};
于 2017-09-22T16:16:22.693 回答
1

这是一篇文章,详细解释了 lambda 如何与节点一起工作,以及如何实现 DB 连接的示例。与@dashmug 建议的不同,您不应该断开您的数据库,因为每次连接都会降低您的性能。

于 2019-10-29T05:20:39.620 回答