2
const AWS = require('aws-sdk') 
const docClient = new AWS.DynamoDB.DocumentClient({ region: 'eu-central-1' }) 

const createDocument = (text, callback) => { 
    const createParams = { 
    Item: { 
     text: text 
    }, 
    TableName: 'ToDoItems' 
    } 

    docClient.put(createParams, (err, data) => { 
    if(err) { 
     callback(err, null) 
    } else { 
     callback(null, data) 
    } 
    }) 
} 

exports.handle = (event, context, callback) => { 
    createDocument(event.text, (err, data) => { 
    if(err) { 
     callback(err, null) 
    } else { 
     callback(null, data) 
    } 
    }) 
} 

Это моя функция AWS Lambda, проблема в том, что, когда я получаю обратный вызов, data объект пуст, даже если документ вставляется в DynamoDB. Что может быть здесь?AWS DynamoDB на Lambda не возвращающие вставленные данные

ответ

4

Вы не можете. Вы должны отдельно запросить. На put, если вы установите ReturnValues: 'ALL_NEW', то вы получите "ReturnValues can only be ALL_OLD or NONE"

Обратите внимание на 'возможно' в документации AWS по:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property

ReturnValues ​​- (String) Возможные значения:

  • "NONE"
  • "ALL_OLD"
  • "UPDATED_OLD"
  • "ALL_NEW"
  • "UPDATED_NEW"

Кроме того, вместо того, чтобы отдельно запрашивая, вы также можете просто использовать значение Params. Если он был сохранен, то то, что у вас есть в createParams.Item - это в основном то, что было возвращено, если вы хотите отдельно запросить.

+0

Вот что я в итоге сделал. –

+0

Кроме того, вместо отдельного запроса вы также можете использовать значение params. Если он был сохранен, то то, что у вас есть в createParams.Item - это в основном то, что было возвращено, если вы хотите отдельно запросить. – user1322092

1

Вы должны запросить возвращаемые значения, как это:

const createParams = { 
    Item: { 
     text: text 
    }, 
    TableName: 'ToDoItems', 
    ReturnValues: 'ALL_NEW' 
    } 

Это документально here.

+0

Спасибо за подсказку, я пропустил это. Я получаю, что ReturnValues ​​может быть только ошибкой ALL_OLD или NONE. Любая идея почему? –

+0

Я вижу, http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html говорит, что put принимает только ALL_OLD или NONE –

+0

Ну, вы делаете пометку, а не обновление, так что это только варианты. В принципе, он не хочет расходовать пропускную способность, возвращающую этот элемент вам, когда у вас уже есть элемент в переменной в вашем скрипте. Это позволит вам делать «ALL_OLD», если вы хотите узнать, что такое старое значение (в случае, если put_item заменил существующий элемент). –

0

Существует обходное решение - вы можете использовать update метод DynamoDB.DocumentClient.

TableName: "table", 
    Key: { 
     id: randomId 
    }, 
    AttributeUpdates: { 
     authorId: {Action: "PUT", Value: event.authorId}, 
     date: {Action: "PUT", Value: event.date}, 
     description: {Action: "PUT", Value: event.description}, 
     title: {Action: "PUT", Value: event.title} 
    }, 
    ReturnValues: "ALL_NEW" 

Этот метод создает новый элемент и вернуть все, что вам нужно