我在AWS中使用Dynamo DB。我已经阅读了一些文档,现在具有半功能lambda函数。我对nodejs不太熟悉,但是想出了“它是javascript!就这样对待它!”。
因此,此功能与扫描user_handle
db中的数据库有关,如果用户已经有一个句柄,则警告该句柄已经存在。如果该句柄不存在,则更新user_handle
项目。
所以我的函数会更新该句柄(如果它不存在),但是如果存在,那么我需要在响应中看到它。
这是我的lambda函数:
const AWS = require('aws-sdk'); const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-west-1'});
exports.handler = (event, context, callback) => {
let e = JSON.parse(event.body)
var params = {
TableName: event.stageVariables.user,
Key: { 'userId' : e.userId },
UpdateExpression: 'set user_handle = :user_handle',
ExpressionAttributeValues: {
':user_handle' : e.user_handle,
}
};
var scanParams = {
TableName : event.stageVariables.user,
FilterExpression : 'user_handle = :user_handle',
ExpressionAttributeValues : {':user_handle' : e.user_handle}
};
docClient.scan(scanParams, function(err, data) {
if (err) {
console.log("ERROR:", err);
let response = {
"statusCode": err.statusCode,
"headers": {},
"body": JSON.stringify(err)
}
console.log("RESPONSE", response)
callback(response)
} else {
let response = {
"statusCode": 200,
"body": JSON.stringify({"Success": true})
}
callback(null, response)
// console.log("RESPONSE", response)
// console.log("DATA", data)
if( data.Count >= 1 ){
let handleExistsResponse = {
"statusCode": 200,
"body": JSON.stringify({"Success": false})
}
console.log("HANDLE IT", handleExistsResponse)
callback(null, handleExistsResponse)
} else {
docClient.update(params, function(err, data) {
if (err) {
console.log("ERROR:", err);
let response = {
"statusCode": err.statusCode,
"headers": {},
"body": JSON.stringify(err)
}
console.log(response)
callback(response)
} else {
let response = {
"statusCode": 200,
"body": JSON.stringify({"Success": true})
}
callback(null, response)
}
});
}
}
// console.log("DATA", data);
});
};
这是我的React Native App中的DB函数:
export async function createUserHandle() {
return new Promise((resolve, reject) => {
let { auth } = store.getState()
let reqBody = {
userId: auth.user.username,
user_handle: auth.user_handle,
}
let path = '/u/create-user-handle'
let myInit = {
headers: { 'Content-Type': 'application/json' },
body: reqBody,
// response: true,
}
API.post(apiName, path, myInit)
.then((resp) => {
console.log('response from user handle', resp)
resolve(resp)
})
.catch((error) => {
console.warn('Create USER Handle ERROR', error)
reject(error)
})
})
}
在Lambda中,我希望if (data.Count >= 1){}
能给我一个来自
let handleExistsResponse = {
"statusCode": 200,
"body": JSON.stringify({"Success": false})
}
,如果它为假,那么我可以在前端显示适当的消息。但是如果我在前端将其登录,我得到的响应是正确的。
(同样,我不介意对此进行代码审查,可能是我第三次编写这样的函数了。谢谢!)
答案 0 :(得分:0)
想通了..
} else {
let response = {
"statusCode": 200,
"body": JSON.stringify({"Success": true})
}
callback(null, response)
// console.log("RESPONSE", response)
// console.log("DATA", data)
if( data.Count >= 1 ){
在响应通过后,发生了回调,保持了条件通过后的下一次回调。我现在正在获得所需的响应。感觉不错:D
仍然不介意进行代码审查:)