在 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.
的文档
我正在尝试在 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.