Необходимо отсканировать базу данных и либо отобразить сообщение, либо обновить элемент - PullRequest
0 голосов
/ 15 ноября 2018

Я использую Dynamo DB в AWS.Я просмотрел некоторые документы и теперь получил полуфункциональную лямбда-функцию.Я не слишком знаком с nodejs, но подумал: «это javascript! Просто относитесь к нему так!».

Так что эта функция предназначена для сканирования базы данных в user_handle db, и если у пользователя уже есть существующийобработать, затем предупредить пользователя, что описатель уже существует.Если дескриптор не существует, обновите элемент user_handle.

Так что моя функция обновляет дескриптор, если он не существует, но если он существует, то мне нужно увидеть это в моем ответе.

Вот моя лямбда-функция:

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);
    });


     };

Вот функция DB в моем приложении React Native:

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 голосов
/ 15 ноября 2018

Понял. ..

} 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

Все равно не возражаю против обзора кода:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...