No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

UPDATE para actualizar datos

16/25
Recursos

Aportes 4

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Mi funci贸n par actualizar tanto name como tel茅fono:

const aws = require("aws-sdk")

let dynamoDbClientParams = {}



const dynamodb = new aws.DynamoDB.DocumentClient(dynamoDbClientParams)


const updateUsers = async(event, context) => {

  let userId = event.pathParameters.id

  const body = JSON.parse(event.body)
  const params = {
    TableName: 'usersTable',
    Key: { pk: userId },
    UpdateExpression: "set #name = :name, #telefono = :telefono",
    ExpressionAttributeNames : {"#name":"name", "#telefono": "telefono"},
    ExpressionAttributeValues: { ':name': body.name, ":telefono": body.telefono },
    ReturnValues: "ALL_NEW"
  }

  return dynamodb.update(params)
    .promise()
    .then(res => {
      console.log(res)
      return {        
          "statusCode": 200,
          "body": JSON.stringify({"user": res})        
      }
    })
}


module.exports = {
  updateUsers
}

Con ayuda de ChatGPT cre茅 una funci贸n que genera un objeto params para el update, tal que sea posible actualizar una cantidad arbitraria de propiedades. Este fue el resultado.

function makeUpdateParams(tableName, key, attributesToUpdate) {
  const ExpressionAttributeNames = {};
  const ExpressionAttributeValues = {};
  let UpdateExpression = "SET ";

  // For each attribute to update, add it to the UpdateExpression and build the ExpressionAttributeNames and ExpressionAttributeValues objects
  Object.entries(attributesToUpdate).forEach(
    ([attributeName, attributeValue]) => {
      const keyName = `#${attributeName}`;
      const valueName = `:${attributeName}`;
      UpdateExpression += `${keyName} = ${valueName}, `;
      ExpressionAttributeNames[keyName] = attributeName;
      ExpressionAttributeValues[valueName] = attributeValue;
    }
  );

  // Remove the trailing comma and space from the UpdateExpression
  UpdateExpression = UpdateExpression.slice(0, -2);

  // Build the params object with the tableName, key, UpdateExpression, and ExpressionAttributeNames and ExpressionAttributeValues objects
  const params = {
    TableName: tableName,
    Key: { pk: key },
    UpdateExpression,
    ExpressionAttributeNames,
    ExpressionAttributeValues,
    ReturnValues: "ALL_NEW",
  };

  return params;
}

Consejos

  • En mi caso, antes de hacer el sls deploy me gusta hacer todas las pruebas con sls offline server para corregir todo en local en caso de haber fallas y una vez validado si mandar todo a la nube. As铆 evitamos constantemente hacer actualizaciones al stack de CloudFormation (lo cual resulta un poco lento y genera peque帽os costos innecesarios).

  • Por otro lado, les recomiendo mucho a los que usan Insomnia (creo que debe haber una manera en Postman) crear estos entornos, para siempre hacer llamados a las mismas direcciones y solo cambiando el URL de la API de acuerdo a desarrollo o producci贸n:

  • As铆 va mi DynamoDB por ahora:

  • Mi GitHub

As铆 va quedando mi tabla 馃槂