繁体   English   中英

使用JavaScript使用Amazon dynamoDB

[英]Consume Amazon dynamoDB with JavaScript

我一直在尝试使用jQuery和Ajax调用通过JavaScript与Amazon DynamoDB进行交互,但一直没有成功。 经过两天的研究,我开始认为这可能是不可能的。 我看到他们有适用于Java,PHP和.Net的SDK,但还没有JavaScript。

亚马逊解释了如何在此链接中向发电机发送命令:

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/UsingJSON.html#JSONMajorExample

我已经能够使用PHP sdk和node.js(https://github.com/xiepeng/dynamoDB)来完成它,但是通常的javascript ajax调用或xmlHttpRequest调用没有运气。

我已经能够获得有效的aws签名,秘密ID和会话令牌,因此我将其硬编码到头中。

这是我的代码:

$.ajax({  
    beforeSend: function(xhr) {
                console.log("getting built");


                     xhr.setRequestHeader('host', 'dynamodb.us-east-1.amazonaws.com');
                 xhr.setRequestHeader('x-amz-date', 'Fri, 10 Feb 2012 20:44:00 GMT');
                 xhr.setRequestHeader('date', 'Fri, 10 Feb 2012 20:44:00 GMT');
                 xhr.setRequestHeader('x-amz-security-token', '**MYSECURITY TOKEN**');
                 xhr.setRequestHeader('x-amz-target', 'DynamoDB_20111205.PutItem');
                 xhr.setRequestHeader('content-type', 'application/x-amz-json-1.0');
                 xhr.setRequestHeader('content-length', 103);
                 xhr.setRequestHeader('x-amzn-authorization', 'AWS3 AWSAccessKeyId=**MY ACCESS KEY**,Algorithm=HmacSHA256,SignedHeaders=host;x-amz-date;x-amz-security-token;x-amz-target,Signature=**MY SIGNATIURE**=');


          },

    type: "POST",  
    url: "http://dynamodb.us-east-1.amazonaws.com",  
      dataType: "json",
    data: '{"TableName":"Sample","Item":{"RecordId":{"S":"white"},"Square":{"S":"teess"},"circle":{"S":"eeerer"}}}',
        error: function(XHR,textStatus,errorThrown) {
    //  alert ("XHR="+XHR+"\ntextStatus="+textStatus+"\nerrorThrown=" + errorThrown);
            console.log(XHR);
        console.log(textStatus);
          console.log(errorThrown);
        },

        success: function(data) { 
                console.log("success");
            }
        });

当我运行这个时,我得到404 Not found错误,方法显示为“OPTIONS”(而不是POST或GET)

不熟悉AWS Dynamo,但我非常熟悉HTTP和XMLHttpRequest,而Host不是可以通过xhr设置的标头。 XHR从正在请求的URL中提取主机信息。 不确定$.ajax是否会忽略您尝试设置该标头,但我会在没有它的情况下尝试它。

另外,你如何计算你的内容长度? 您的字符串 103 个字符 ,但它不一定是103字节(这取决于编码,字符集,等),这是怎么Content-Length被计算。 我会尝试没有那个标题。

让我们知道怎么回事!

更新:

我认为自从微软为每个人做出决定以来,它已成为Ajax的一部分“同源政策”的受害者。 :-)您将需要编写驻留在您的域上的某种服务器端代理,并向其发出Ajax请求。

你熟悉PHP吗? 看起来AWS在PHP中有一个用于DynamoDB的库。

您正在尝试使用AJAX进行跨域请求。 除非您的应用程序和服务都已设置,否则这不一定有效。 AWS目前不允许通过CORS协议发出请求。 您看到的OPTIONS标头是您的JavaScript向AWS发出飞行前CORS请求,该请求被拒绝。 您需要使用服务器端代理(使用AWS提供的SDK之一)来进行实际的服务调用。 您的JavaScript可以通过AJAX与您的代理进行通信,因为它将托管在同一个域中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM