MongoClient.connect 失败,但不抛出错误

问题描述 投票:0回答:1
try {
    if (!conn) {
      console.log("Attempting to Connect to Atlas");
      conn = await MongoClient.connect(process.env.MONGO_URL, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
      });
      console.log("Successfully connected to Atlas");
    }
  } catch (err) {
    console.log("Failed to connect to Atlas: ", err);
    return {
      statusCode: 500,
      body: JSON.stringify(err),
    };
}

上面是我通过Node连接Atlas的代码。 Atlas数据库尚未启用上述服务器的IP地址进行连接。因此它应该会失败。但是当失败时,catch块中的代码不会被执行,以下是日志:

2022-11-28T14:10:35.966-06:00   2022-11-28T20:10:35.966Z 7e455355-8126-4f71-afb3-2185683f9f8a INFO Attempting to Connect to Atlas

2022-11-28T14:10:38.725-06:00   2022-11-28T20:10:38.725Z 7e455355-8126-4f71-afb3-2185683f9f8a Task timed out after 3.01 seconds

2022-11-28T14:10:38.725-06:00   END RequestId: 7e455355-8126-4f71-afb3-2185683f9f8a

2022-11-28T14:10:38.725-06:00   REPORT RequestId: 7e455355-8126-4f71-afb3-2185683f9f8a Duration: 3008.53 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 49 MB

2022-11-28T14:11:42.725-06:00   START RequestId: 7e455355-8126-4f71-afb3-2185683f9f8a Version: $LATEST

问题是,为什么它不抛出错误?为什么它不进入 catch 块?

这是 AWS 上尝试连接到 atlas 的 lambda 函数。

javascript node.js mongodb lambda mongodb-atlas
1个回答
2
投票

默认情况下

MongoDB
启动 30 秒后会发生连接超时。

如果您看到日志,则任务在 3 秒后立即超时,并且您需要支付 3 秒的 lambda 使用费用。所以,你的代码只执行了 3 秒并超时。尝试检查并将 lambda 的

timeout
增加到一分钟,您可能会看到实际的数据库连接失败。

理想情况下,如果您使用

serverless
,您可以将
timeout
作为选项或在 API 网关级别传递。

© www.soinside.com 2019 - 2024. All rights reserved.