在我的某些路由中,lambda函数在使用现有mongodb连接时会在6秒后超时。
我确定函数本身不是问题,因为我添加了很多日志,并且需要0.1秒才能完成,但是lambda在6+秒内不会返回任何内容。在大多数在线教程中,数据库连接与lambda函数位于同一文件夹中,但是由于我有5个以上的端点,因此我将其移至其自己的程序包中。
这是不时超时的最基本端点
module.exports.getAll = async (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
try {
await databaseModels.db();
const x = await databaseModels.items.model.find({});
callback(null, {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(x)
})
} catch (error) {
callback(error, {
statusCode: 500,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(error)
})
}
};
这是我在每个lambda函数开始时调用的连接数据库函数
const url = ``
let isConnected;
module.exports = connectToDatabase = () => {
if (isConnected) {
console.log('=> using existing database connection');
return Promise.resolve();
}
console.log('=> using new database connection');
return mongoose.connect(url).then(db => {
isConnected = db.connections[0].readyState;
});
};
在其中一篇文章中,我发现作者为每个请求打开了一个连接,并在计算完成后将其关闭。这是一个好习惯吗?