在nodejs的aws lambda中从s3读取文件后,将数据传递给aws cognito时函数退出



我是新来的,我有问题,我必须从位于S3桶的csv文件读取数据后,在cognito中创建近200个用户问题是,如果用户已经在Cognito中存在,我的代码停止执行,并给我一个错误"给定的电子邮件帐户已经存在。"有没有一种方法可以让我传递整个数据。如果认知中已经有用户使用相同的电子邮件,它会跳过该用户并检查新用户数据,最后哪些用户已经存在于认知中。这是在认知中创建用户的函数
下面是创建认知用户的函数

function RegisterUser(data2) {
console.log(data2[1])
for(let i=0;i<=data2.length;i++){
var attributeList = [];
var cognitoUser;
attributeList.push(new AmazonCognitoIdentity.CognitoUserAttribute({ Name: "name", Value: data2[i][0]}));
attributeList.push(new AmazonCognitoIdentity.CognitoUserAttribute({ Name: "email", Value: data2[i][1] }));

try{

return new Promise((resolve, reject) => {
userPool.signUp(data2[i][1], data2[i][2], attributeList, null, (err, result) => {

if (err) {
console.log(err.message);
reject(err);
return;

}
cognitoUser = result.user;
resolve(cognitoUser);
});
});

}catch(err){

return{

success:false,
message:err

}

}

}
}

这里是lambda处理程序


exports.handler = async (event, context) => {
try {
// Converted it to async/await syntax just to simplify.
const data = await S3.getObject({Bucket: 'user-data-file', Key: 'SampleCSVFile_2kb.csv'}).promise();
var data1 = Buffer.from(data.Body).toString();
var   data2 = data1.split("rn"); // SPLIT ROWS
for (let i in data2) { // SPLIT COLUMNS
data2[i] = data2[i].split(",");
}
const userPoolResponse = await RegisterUser(data2);
}
catch (err) {
return {
statusCode: err.statusCode || 400,
body: err.message || JSON.stringify(err.message)
}
}
}

在谷歌上快速搜索了一下:如何查看AWS Cognito中已经存在的电子邮件?

这肯定是前端,但你的用例似乎是一个快速偶尔运行脚本,而不是一个经常使用的用户系统-在这种情况下,这是基本的编程101来解决。在调用周围放置另一个try catch来注册用户。你检查抛出的异常,如果它'已经注册',你通过并继续在循环中不中断。上面的链接可以给你一些想法,看看要寻找什么来确定是否存在异常。

最新更新