来自Node-aws的Dynamo Local:所有操作都失败“无法对不存在的表执行操作”

我有一个本地dynamo-db运行。 我已经使用JavaScript控制台设置了我的表格,并从那里列出了OK。

我也可以把项目从JavaScript控制台放到我的表中:

var params = { TableName:"environmentId", Item: { environmentId: {"S":"a4fe1736-98cf-4560-bcf4-cc927730dd1b"} }}; dynamodb.putItem(params, function(err, data) { console.log("put : err was " + JSON.stringify(err) + " and data is " + JSON.stringify(data)); }); 

打印出来put : err was null and data is {} ,我假设是“成功”,因为

 params = { "Key":{"environmentId":{"S":"a4fe1736-98cf-45e0-bcf4-cc927730dd1b"}},"TableName":"environmentId"} dynamodb.getItem(params, function(err, data) { console.log("get : err was " + JSON.stringify(err) + " and data is " + JSON.stringify(data)); }); 

打印get : err was null and data is {"Item":{"environmentId":{"S":"a4fe1736-98cf-45e0-bcf4-cc927730dd1b"}}}它检索我刚刚放到表中的对象。

但是,如果启动节点REPL并input:

 var AWS = require('aws-sdk'); AWS.config.loadFromPath("./config/credentials.js"); endpoint = new AWS.Endpoint("http://localhost:8000"); var dynamoOpts = {apiVersion: '2012-08-10', 'endpoint':endpoint}; var dynamodb = new AWS.DynamoDB(dynamoOpts); var params = { TableName:"environmentId", Item: { environmentId: {"S":"a4fe1736-98cf-4560-bcf4-cc927730dd1b"} }}; dynamodb.putItem(params, function(err, data) { console.log("put : err was " + JSON.stringify(err) + " and data is " + JSON.stringify(data)); } 

我得到一个资源未find错误:

 { "message":"Cannot do operations on a non-existent table", "code":"ResourceNotFoundException", "time":"2015-04 10T10:01:26.319Z", "statusCode":400, "retryable":false, "retryDelay":0 } 

putCommand返回的ASW.request对象具有正确的端点:

 { protocol: 'http:', host: 'localhost:8000', port: 8000, hostname: 'localhost', pathname: '/', // etc. 

同样的事情发生在我的节点应用程序,但是连接到真正的AWS托pipe发电机相同的代码工作。

问题是JavaScript控制台和您的应用程序使用不同的configuration文件(凭据和区域),因此DynamoDB本地将为它们创build单独的数据库文件。 启动本地DynamoDB时,通过使用-sharedDb标志,将为所有客户端共享单个数据库文件。

从文档 :

-sharedDb – DynamoDB Local将使用单个数据库文件,而不是为每个凭据和区域使用单独的文件。 如果指定-sharedDb,则所有DynamoDB本地客户端都将与同一组表进行交互,而不pipe其区域和凭证configuration如何。