0

我正在构建一个 Node JS 应用程序。对于数据库,我使用的是 AWS DynamoDB。我现在正在做的是我在本地安装了 DynamoDB 并改用本地版本。但似乎我的应用程序没有发送到我机器上安装的本地 DynamoDB。

我在本地安装了 DynamoDB 并按照此链接https://cloudaffaire.com/install-dynamodb-in-local-system/中的说明启动并运行它。在这个阶段它在 localhost:8000 运行。

然后我创建了一个在终端中运行以下命令的表。

aws dynamodb create-table --table-name CloudAffaire --attribute-definitions AttributeName=Topic,AttributeType=S --key-schema AttributeName=Topic,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 --endpoint-url http://localhost:8000 --output table

它成功并且没有错误。

然后我下载了 DynamoDB admin 以在 GUI 中可视化数据。为此,我按照此链接安装了该工具,https://medium.com/swlh/a-gui-for-local-dynamodb-dynamodb-admin-b16998323f8e#:~:text=dynamodb%2Dadmin%20is%20a %20图形,%2Dlocal%2C%20dynalite%20或%20localstack

我运行该工具,我可以看到我创建的表在 UI 中。

然后我在我的节点 JS 项目中使用代码创建了一个表。这是我的代码。

// running this file using `node -e 'require(\"./db/utils.js\").createTables()'` will create the table
require('dotenv').config();
const AWS = require("aws-sdk");

AWS.config.update({
    region: "local",
    endpoint: "http://localhost:8000"
  });
const dynamodb = new AWS.DynamoDB();



function createTables() {

  const params = {
    TableName: "RegionTest",
    KeySchema: [{
      AttributeName: "name",
      KeyType: "HASH" // HASH - partition key and RANGE - sort key
    }],
    AttributeDefinitions: [{
      AttributeName: "name",
      AttributeType: "S" // S = string, B = binary, N = number
    }],
    ProvisionedThroughput: {
      ReadCapacityUnits: 10,
      WriteCapacityUnits: 10
    }
  };

  DynamoDB.createTable(params, function(err, data) {
    if (err) {
      console.error("Unable to create table", err);
    } else {
      console.log("Created table", data);
    }
  });
}

module.exports = {
  createTables
}

然后我在终端中运行以下命令来创建表。

node -e 'require(\"./db/utils.js\").createTables()'

表已创建,我得到以下输出。

Created table {
  TableDescription: {
    AttributeDefinitions: [ [Object] ],
    KeySchema: [ [Object] ],
    TableStatus: 'ACTIVE',
    CreationDateTime: 2021-05-23T11:28:28.122Z,
    ProvisionedThroughput: {
      LastIncreaseDateTime: 1970-01-01T00:00:00.000Z,
      LastDecreaseDateTime: 1970-01-01T00:00:00.000Z,
      NumberOfDecreasesToday: 0,

      ReadCapacityUnits: 10,
      WriteCapacityUnits: 10
    },
    TableSizeBytes: 0,
    ItemCount: 0,
    TableArn: 'arn:aws:dynamodb:ddblocal:000000000000:table/Region'
  }
}

当我转到在 localhost:8001 上运行的 DynamoDB 管理员时,新表不存在。我只能看到我使用终端创建的上一个表。我的代码有什么问题,如何修复它以使用本地 DynamoDB?

4

0 回答 0