需要扫描数据库并显示消息或更新项目

时间:2018-11-15 16:12:58

标签: node.js react-native aws-lambda

我在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})
              }

,如果它为假,那么我可以在前端显示适当的消息。但是如果我在前端将其登录,我得到的响应是正确的。

(同样,我不介意对此进行代码审查,可能是我第三次编写这样的函数了。谢谢!)

1 个答案:

答案 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

仍然不介意进行代码审查:)