在Javascript中需要AWS时遇到问题

时间:2016-08-04 14:38:32

标签: javascript database amazon-web-services amazon-dynamodb aws-sdk

我试图在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();

    }
});    

文件&#34; super_secret_conf.json&#34;是包含我的AWS凭据的JSON文件。我之前尝试将凭据存储在~/.aws/credentials,但这不起作用。 (credentials应该是一个文件夹还是文件?我曾尝试将我的凭据保存在一个空白文件中 - 没有任何扩展名。只是想我提一下。)所以我跟着另一个教程,据说使用JSON方法(而且我知道它非常不安全),这就是你在这里看到的。我仍然得到一个错误:

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

非常感谢所有和任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要两次AWS,第一次将其称为foo。而且你不是在等待config.json需要调用的回调(或者甚至传递一个回调函数)。我相信您的代码需要更改为:

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的文档,特别是阅读Configuring the SDK in the Browser上的页面。