DynamoDB 本地访问控制允许来源

Pie*_*Luc 2 javascript amazon-web-services amazon-dynamodb

我正在尝试开发一个应用程序(例如在http://whatever.dev上),一旦投入生产,它将使用带有 JavaScript(而不是 Node)的 AWS DynamoDB。目前,我们使用 DynamoDB Local 能够在不影响 AWS 的情况下进行本地开发。

DynamoDB Local 的问题在于没有提供从服务器发回的 Access-Control-Allow-Origin 标头。

所以如果我在whatever.dev上这样做:

  var dynamodb = new AWS.DynamoDB({
    accessKeyId:    'thisIsSomeInvalidKey',
    secretAccessKey:'anEquallyInvalidSecret!',
    region:         'us-east-1',
    endpoint:       'http://whatever.dev:8000',
    sslEnabled:     false,
    maxRetries:     5,
    //logger:         console
  });

  dynamodb.listTables(function(err, data) {
    console.log(data)
});
Run Code Online (Sandbox Code Playgroud)

这是我回来的:

XMLHttpRequest 无法加载whatever.dev:8000。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问原点“whatever.dev”。

所以,基本上,我在本地开发,使用 DynamoDB Local 但我无法连接到它,因为它没有给我 XHR 津贴。有没有办法解决?我可以修改 DynamoDB Local 中的某些内容以获得正确的标头吗?

我的项目没有 Python/Java 依赖项(它纯粹是前端,带有 Backbone 和 RequireJS),所以使用一个会很糟糕。

谢谢!

小智 5

您可以使用 -cors 参数启动 DynamoDB Local

-cors <arg>             Enable CORS support for javascript against a
                        specific allow-list list the domains
                        serporated by , [use '*' for public access]
Run Code Online (Sandbox Code Playgroud)

例如

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar --cors "*"
Run Code Online (Sandbox Code Playgroud)

并且可以在浏览器中打开一个包含以下内容的 html 文件:

<html>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.14.min.js"></script>
<script>
  var dynamodb = new AWS.DynamoDB({
    accessKeyId:    'thisIsSomeInvalidKey',
    secretAccessKey:'anEquallyInvalidSecret!',
    region:         'us-east-1',
    endpoint:       'http://localhost:8000',
    sslEnabled:     false,
    maxRetries:     5,
  });

  dynamodb.listTables(function(err, data) {
    console.log(data) // { TableNames: Array[0] }
  });
</script>
</html>
Run Code Online (Sandbox Code Playgroud)

希望有帮助!