注:これらはすべて、DynamoDBのローカルインスタンスで発生しています。
これは、DynamoDBシェルからテーブルを作成するために使用したコードです。
var params = {
TableName: "TABLE-NAME",
KeySchema: [
{ AttributeName: "pid",
KeyType: "HASH"
}
],
AttributeDefinitions: [
{ AttributeName: "pid",
AttributeType: "S"
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
};
dynamodb.createTable(params, function(err, data) {
if (err)
console.log(JSON.stringify(err, null, 2));
else
console.log(JSON.stringify(data, null, 2));
});
これは、要素をDB(node.js内)に追加するために呼び出される関数です。
function(request, response) {
params = {
TableName: 'TABLE-NAME',
Item: {
pid: 'abc123'
}
};
console.log(params);
dynamodb.putItem(params, function(err, data) {
if (err)
console.log(JSON.stringify(err, null, 2));
else
console.log(JSON.stringify(data, null, 2));
});
}
私が得る出力は次のとおりです。
{ TableName: 'TABLE-NAME',
Item: { pid: 'abc123' } } // THIS IS PARAMS
{
"message": "There were 7 validation errors:\n* InvalidParameterType: Expected params.Item['pid'] to be a structure\n* UnexpectedParameter: Unexpected key '0' found in params.Item['pid']\n* UnexpectedParameter: Unexpected key '1' found in params.Item['pid']\n* UnexpectedParameter: Unexpected key '2' found in params.Item['pid']\n* UnexpectedParameter: Unexpected key '3' found in params.Item['pid']\n* UnexpectedParameter: Unexpected key '4' found in params.Item['pid']\n* UnexpectedParameter: Unexpected key '5' found in params.Item['pid']",
"code": "MultipleValidationErrors",
"errors": [
{
"message": "Expected params.Item['pid'] to be a structure",
"code": "InvalidParameterType",
"time": "2015-11-26T15:51:33.932Z"
},
{
"message": "Unexpected key '0' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.933Z"
},
{
"message": "Unexpected key '1' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.933Z"
},
{
"message": "Unexpected key '2' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.933Z"
},
{
"message": "Unexpected key '3' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.933Z"
},
{
"message": "Unexpected key '4' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.934Z"
},
{
"message": "Unexpected key '5' found in params.Item['pid']",
"code": "UnexpectedParameter",
"time": "2015-11-26T15:51:33.934Z"
}
],
"time": "2015-11-26T15:51:33.944Z"
}
前の行に印刷されていないときに、キー0、1、2、3、4、および5が表示されない理由と方法がわかりません。
また、エラーを修正するにはどうすればよいですかExpected params.Item['pid'] to be a structure
?文字列として宣言し、文字列を保存しようとしています!
その他の注意:関数で使用したのと同じコードは、シェルで実行したときに正常に機能します。また、aws-sdkを含め、必要に応じて構成しました。
var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
AWS.config.endpoint = 'http://localhost:8000/'
var dynamodb = new AWS.DynamoDB();
putItem()
_AWS.DynamoDB
_ クラスのメソッドは、_params.Item
_オブジェクトがAttributeValue表現としてフォーマットされることを期待しています。つまり、これを変更する必要があります。
_params = {
TableName: 'TABLE-NAME',
Item: {
pid: 'abc123'
}
};
_
これに:
_params = {
TableName: 'TABLE-NAME',
Item: {
pid: {
S: 'abc123'
}
}
};
_
ネイティブjavascriptオブジェクトを使用する場合は、 _AWS.DynamoDB.DocumentClient
_ クラスを使用する必要があります。このクラスは、次のようにJavascriptタイプをDynamoDB AttributeValuesに自動的にマーシャリングします。
put()
メソッドを提供し、これは AWS.DynamoDB.putItem()
に委任します。
注:以下の複数のコメントで述べられているように、この回答は無効になる場合があります。
Nodejsからデータベースにレコードを追加するために使用する必要がある関数は、put
であり、DynamoDBシェルで使用されるputItem
ではありません。上記の機能を次のように変更すると修正されました。
function(request, response) {
params = {
TableName: 'TABLE-NAME',
Item: {
pid: 'abc123'
}
};
console.log(params);
dynamodb.put(params, function(err, data) {
if (err)
console.log(JSON.stringify(err, null, 2));
else
console.log(JSON.stringify(data, null, 2));
});
}