No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
18 Hrs
20 Min
51 Seg

UPDATE para actualizar datos

16/25
Recursos

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 😃