在 Javascript 中要求使用 AWS 时遇到问题

Having trouble with requiring AWS in Javascript

我正在尝试在 Javascript 文件中实施 DynamoDB。连续试了很多教程都无济于事。我想要做的就是从我的 Javascript 代码(在 HTML 页面中是 运行)中进行查询。不幸的是,我的代码甚至达不到这一点。当我尝试要求 AWS-SDK 时,它会抛出错误。我用 Node.js 安装了 aws-sdk。被多个教程搞糊涂后,最终得到如下代码:

HTML:

<!DOCTYPE html>
<html>

<head>
<script src="http://requirejs.org/docs/release/2.2.0/r.js"></script>
<script src="boom.js"></script>
</head>

<body></body>

</html>

JavaScript (boom.js):

require(['aws-sdk'], function (foo) {

    var CONF = require("./super_secure_conf.json");
    var AWS = require("aws-sdk");

    function init(){
        AWS.config = new AWS.Config({
            access_key_id: CONF.AWS_ACCESS_KEY_ID,
            secretAccessKey: CONF.AWS_SECRET_ACCESS_KEY,
            region: "us-east-1"
        });
        DynamoDB = new AWS.DynamoDB();

    }
});    

文件 "super_secret_conf.json" 是一个包含我的 AWS 凭证的 JSON 文件。我之前尝试将凭据存储在 ~/.aws/credentials,但那没有用。 (credentials 应该是文件夹还是文件?我曾尝试将我的凭据保存在一个空白文件中——没有任何扩展名。我只是想提一下。)所以我遵循了另一个教程,其中说使用 JSON 方法(我知道它非常不安全),这就是你在这里看到的。我仍然收到错误消息:

Error: Module name "super_secure_conf.json" has not been loaded yet for context: _. Use require([])

非常感谢所有帮助。

您需要两次 AWS,第一次调用它 foo。而且您不是在等待来自 config.json require 调用的回调(或者甚至将回调函数传递给它)。我相信您的代码需要更改为如下所示:

require(['aws-sdk', "./super_secure_conf.json"], function (AWS, CONF) {    
    function init(){
        AWS.config = new AWS.Config({
            access_key_id: CONF.AWS_ACCESS_KEY_ID,
            secretAccessKey: CONF.AWS_SECRET_ACCESS_KEY,
            region: "us-east-1"
        });
        DynamoDB = new AWS.DynamoDB();    
    }
});    

但是我不确定路径 "./super_secure_conf.json" 是否真的有效。这看起来像是用于在服务器端 NodeJS 应用程序而不是浏览器端 JavaScript 应用程序中加载文件的路径。

请注意,您必须以这种方式加载配置的原因是因为加载 AWS 配置的 ~/.aws/credentials 方法不适用于 JavaScript 应用程序 运行一个浏览器。我认为您一直在阅读 NodeJS 教程,这些教程不会在浏览器中完美地转换为 JavaScript。我强烈建议您首先查看 AWS SDK for JavaScript in the Browser, and in particular read the page on Configuring the SDK in the Browser.

的文档