2015-08-27 3 views
0

Я написал следующий код, чтобы вернуть строку из таблицы Dynamodb на основе ключа с именем id.Node.js Проблема с Dynamodb Использование getItem

var db = new AWS.DynamoDB(); 
var params = { 
    AttributesToGet: [ 
     "dealername" 
    ], 
    TableName : "syv_dealer", 
    Key : { 
     "id" : { 
      "S" : "1" 
     } 
    } 
} 

db.query(params, function(err, data) { 
    if (err) { 
     console.log(err); // an error occurred 
    } else { 
     console.log(data); // successful response 
    } 
}); 

Мой код для записи данных в таблицу работал хорошо, но приведенный выше код сохраняет генерируя следующее сообщение об ошибке: Непредвиденная ключ «Key» находится в Params

таблица существует и есть атрибут ID со значением «1» в таблице.

Я просмотрел все примеры, которые мог найти, и изменил оператор params сто раз, но ничего не сработало. Я уверен, что это что-то простое, но любая помощь будет оценена по достоинству.

ответ

0

Это ошибка, потому что Key является недопустимым параметром для отправки запроса на этот API. Посмотрите на DynamoDB Query syntax, чтобы определить, какие атрибуты вы можете установить.

Надлежащим образом выполнить этот запрос будет с KeyConditionExpression, который будет выглядеть примерно так:

var params = { 
    TableName : "syv_dealer", 
    KeyConditionExpression: "id = :v1", 
    ExpressionAttributeValues: { 
     ":v1": {"S": "1"} 
    }, 
    ProjectionExpression: "dealername" 
} 

Использование ProjectionExpression вместо AttributesToGet также современный способ определения атрибутов.

0

Спасибо, я многое изменил, что не понял, что я изменил его с getItem на Query.

Основная проблема моей проблемы заключалась в том, что вызов функции асинхронный, поэтому я не был терпеливым и позволял выполнить обратный вызов.

Я новичок в Node.js, поэтому я пытаюсь выяснить, как проверить учетные данные в вызове веб-службы и не продолжать его до тех пор, пока я не проведу аутентификацию запрашивающего. Есть ли способ вызова getItem, чтобы он был синхронным? Я понимаю, что могу встроить логику, которая следует в обратном вызове getItem, но я действительно пытался использовать ту же самую процедуру обеспечения безопасности для каждой конечной точки.

Мысли?

Смежные вопросы