当我在Next JS前端中从axios调用函数时,我的AWS Lambda Node JS函数之一出现了问题。第一次调用该函数时,它成功并正确返回,但当我再次调用它时,它返回'Error:运行时退出,但出现错误:exit status 128'和'ERROR Unhandled Promise Rejection Runtime. UnhandledPromiseRejection '。当我在一次失败的尝试后再次调用它时,它成功运行并正确返回。我的代码有问题吗(下面)?我已经将context.callbackWaitsForEmptyEventLoop设置为false,但我不明白为什么函数会在快速调用时失败。先谢谢你了
const MongoClient = require("mongodb").MongoClient;
const ObjectId = require("mongodb").ObjectId;
const MONGODB_URI = process.env.MONGODB_URI;
let cachedDb = null;
async function connectToDatabase() {
if (cachedDb) {
return cachedDb;
}
const client = await MongoClient.connect(MONGODB_URI);
const db = await client.db(process.env.MONGODB_NAME);
cachedDb = db;
return db;
}
exports.handler = async (event, context) => {
console.log(event.queryStringParameters);
console.log(event.body);
let docType = event.queryStringParameters.docType;
let docId = event.queryStringParameters.docId;
const bodyData = JSON.parse(event.body);
let fundId = event.queryStringParameters.fundId;
context.callbackWaitsForEmptyEventLoop = false;
const db = await connectToDatabase();
try {
const data = await db.collection(docType).findOneAndUpdate({_id : ObjectId(docId), "profile_subscription_documents.fund_id" : fundId},{
$push: {"profile_subscription_documents.$[psd].profile_fund_subscription_documents": {...bodyData} }
},
{
arrayFilters: [
{
"psd.fund_id": fundId
}]
},
{
returnDocument: "after"
});
console.log("Here", data);
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Headers" : "*",
"Access-Control-Allow-Origin": "http://localhost:3000/",
"Access-Control-Allow-Methods": "*"
},
body: JSON.stringify(data),
};
return response;
} catch (error) {
console.error(error);
}
};
2条答案
按热度按时间roqulrg31#
首先想到的是到数据库的连接没有被关闭。
我会添加一个finally语句来关闭数据库连接,如下所示:
我从MongoDB包文档中得到了这个建议:https://www.npmjs.com/package/mongodb
qq24tv8q2#
发现了这个问题:
console.log("Here", data);
行返回undefined,我猜这意味着函数没有正确完成。通过反复试验,我发现是returnDocument: "after"
导致了这个问题,所以我删除了那个部分,现在'ERROR Unhandled Promise Rejection Runtime.UnhandledPromiseRejection'错误已经消失了,一切都很顺利!