我有一个lambda Node.js的功能,像这样:发送和确认LAMBDA代码DynamoDB
function storeUser(email, username, password, salt, fn) {
// Bytesize
var len = 128;
crypto.randomBytes(len, function(err, token) {
if (err) return fn(err);
token = token.toString('hex');
dynamodb.putItem({
TableName: "Users",
Item: {
email: {
S: email
},
username: {
S: username
},
passwordHash: {
S: password
},
passwordSalt: {
S: salt
},
verified: {
BOOL: false
},
verifyToken: {
S: token
}
},
ConditionExpression: 'attribute_not_exists (email)'
}, function(err, data) {
if (err) return fn(err);
else fn(null, token);
});
});
}
事件处理程序是,像这样:
exports.handler = function(event, context) {
var email = event.email;
var username = event.username;
var clearPassword = event.password;
computeHash(clearPassword, function(err, salt, hash) {
if (err) {
context.fail('Error in hash: ' + err);
} else {
storeUser(email, username, hash, salt, function(err, token) {
if (err) {
if (err.code == 'ConditionalCheckFailedException') {
// userId already found
context.succeed({
created: false
});
} else {
context.fail('Error in storeUser: ' + err);
}
} else {
context.succeed({
created: true
});
}
});
}
});
}
我想使用户名和电子邮件独特。我如何确保在写入数据库时,如果其中一个(或两者)不是唯一的,则返回一个错误,说哪个不是唯一的?
你的问题的标题是没有意义的。看看你的代码,你已经在使用ConditionExpression来强制执行唯一的电子邮件地址,只是对你想要强制执行唯一性的其他属性做同样的事情。 –
阅读最后一行:我想知道哪一个不是唯一的(得到一个错误,说哪个不是唯一的?) – cdub