AWS Lambda 节点 - 中断后重启
AWS Lambda Node - restart after interruption
我有一个奇怪的问题,我在 aws lambda 中有一个基于 claudia.js api 构建器的后端。我发现了一件奇怪的事情,当我注册为新用户并且脚本被拒绝 lambda 检索错误并停止执行,并且在数据库中没有创建新用户。但是当我修复数据并在 db 上重新提交注册时,我看到两个新用户,一个使用正确的数据,另一个使用之前的错误数据,似乎新的 lambda 执行从拒绝后的前一个结束开始。这里有一些示例代码:
api.post('/users/register', function(request) {
return new Promise((resolve, reject) => {
if ( typeof request.post !== 'undefined'){
if ( typeof request.post.email !== 'undefined' && typeof request.post.name !== 'undefined' && typeof request.post.password !== 'undefined' && typeof request.post.repassword !== 'undefined' ){
var userData = request.post;
userData.email = xssFilters.inHTMLData(userData.email);
userData.name = xssFilters.inHTMLData(userData.name);
userData.password = xssFilters.inHTMLData(userData.password);
userData.repassword = xssFilters.inHTMLData(userData.repassword);
}else{
reject("Missing some data");
}
if ( userData.name.toLowerCase() == 'self' || userData.name == ''){
reject("Username forbidden");
// here the scripts stop execution on error but on the next execution seems that togheter the new function start also the previous right after the reject
}
}
else{
reject("Missing POST data - application/x-www-form-urlencoded");
}
// here the db insert ect..
});
},{ success : { code : 200}, error : { code : 401 } });
实际例子:
1°尝试
用户:自己(禁止)
email:whatever
注册 -> 错误,禁止用户 -> 没有添加数据库行
2°尝试
用户:newUser(允许)
email:whatever
注册 -> 确定 -> 在数据库上我找到了两个新用户:newUser 和 self
遇到同样问题的朋友,好像在rejection后设置return;
就解决了。
你需要return拒绝后的lambda函数,请设置
context.callbackWaitsForEmptyEventLoop = 假;
我有一个奇怪的问题,我在 aws lambda 中有一个基于 claudia.js api 构建器的后端。我发现了一件奇怪的事情,当我注册为新用户并且脚本被拒绝 lambda 检索错误并停止执行,并且在数据库中没有创建新用户。但是当我修复数据并在 db 上重新提交注册时,我看到两个新用户,一个使用正确的数据,另一个使用之前的错误数据,似乎新的 lambda 执行从拒绝后的前一个结束开始。这里有一些示例代码:
api.post('/users/register', function(request) {
return new Promise((resolve, reject) => {
if ( typeof request.post !== 'undefined'){
if ( typeof request.post.email !== 'undefined' && typeof request.post.name !== 'undefined' && typeof request.post.password !== 'undefined' && typeof request.post.repassword !== 'undefined' ){
var userData = request.post;
userData.email = xssFilters.inHTMLData(userData.email);
userData.name = xssFilters.inHTMLData(userData.name);
userData.password = xssFilters.inHTMLData(userData.password);
userData.repassword = xssFilters.inHTMLData(userData.repassword);
}else{
reject("Missing some data");
}
if ( userData.name.toLowerCase() == 'self' || userData.name == ''){
reject("Username forbidden");
// here the scripts stop execution on error but on the next execution seems that togheter the new function start also the previous right after the reject
}
}
else{
reject("Missing POST data - application/x-www-form-urlencoded");
}
// here the db insert ect..
});
},{ success : { code : 200}, error : { code : 401 } });
实际例子:
1°尝试 用户:自己(禁止) email:whatever 注册 -> 错误,禁止用户 -> 没有添加数据库行
2°尝试 用户:newUser(允许) email:whatever 注册 -> 确定 -> 在数据库上我找到了两个新用户:newUser 和 self
遇到同样问题的朋友,好像在rejection后设置return;
就解决了。
你需要return拒绝后的lambda函数,请设置
context.callbackWaitsForEmptyEventLoop = 假;