AWS中使用JavaScript获取数据

JavaScript想要直接获取AWS数据桶的数据,首先需要下载SDK文件,如果需要Athena则需要注意,因为官网的aws-sdk文件是不包括Athena的,导致AWS下没有Athena方法,所以需要自定义包,链接AWS自定义SDK包

SDK文件下载后引入文件内,查看官网文档,查看需要使用的方法,这里使用的DynamoDB,Athena方法,S3部分由我们大数据同事解决了

DynamoDB查询数据,DynamoDB没什么说的有案例先拿案例,直接复制文本,根据自身条件修改config对象即可,关于config对象参数的对应的意思,去看Class List


Athena对于Athena的API文档无力吐槽,JAVA的案例有,可是没有JavaScript的,所以这就很不舒服了,通过我们后台的帮助下找到了一个大佬写的一个案例,这里也给大家链接分享一下Athena的JavaScript案例(大佬写的比较全,还是要结合自身情况来看)
 

AWS.config.update({
	  region: "XXXX",
	  accessKeyId: "XXXXX",
	  secretAccessKey: "xxxx"
	});
    var athena = new AWS.Athena();
    var queryExecutionId,nextToken;
    var params = {
	  QueryString: 'select * from app_all', 
	  QueryExecutionContext: {
	    Database: 'bigdata'
	  },
	  ResultConfiguration: {
	    OutputLocation: 's3://linkplay-bigdata/athena'
	  }
	};
	athena.startQueryExecution(params, function(err, data) {
	  if (err) console.log(err, err.stack); // an error occurred
	  else{
	 	queryExecutionId = data.QueryExecutionId
	 	console.log(data);
	 	const keepCheckingRecursively = function(){          // successful response
			athena.getQueryExecution(data, function(err, data) {
				  if (err) console.log(err, err.stack); // an error occurred
				  else{
				  	console.log(data);           // successful response\
				  	if(data.QueryExecution.Status.State === "SUCCEEDED"){
				  		getQueryResults(queryExecutionId)
				  	}else if(data.QueryExecution.Status.State === "FAILED"){
				  		console.log('失败')
				  	}else{
				  		setTimeout(() => {
							keepCheckingRecursively();
						}, 2000);
				  	}
				  }
			})
		}
	 	keepCheckingRecursively()
	  }   
	});
	function getQueryResults(QueryExecutionId,NextToken){
		var params = {
		  QueryExecutionId:QueryExecutionId, /* required */
		  MaxResults:1000,
		  NextToken:NextToken
		};
		athena.getQueryResults(params, function(err, data) {
		  if (err) console.log(err, err.stack); // an error occurred
		  else{
		  	console.log(data);           // successful response
		  	if(!data.NextToken){console.log('end')}
		  	else getQueryResults(QueryExecutionId,data.NextToken)
		  } 
		});
	}

Athena是根据自身情况写的,从DB跟Athena上取出不同的数据,这里的Athena没有S3的处理,因为前文也说了,S3部分我们大数据帮我处理了,如果情况不同,这里个人推荐,看大佬的案例,结合AWS的Clss List看自己需要用到的方法,基本是可以解决问题的

下面是Vue中使用AWS可能出现的几个问题
1.Vue中如果外链aws-sdk的文件包,可能会出现 _xamzrequire is not defined 的错误信息,具体原因不太清楚,这里没有搞清楚,不过如何避免这个错误,这里说一下,关于引入SDK的几种情况

//避免这个错误的出现Vue通过命令行安装AWS-SDK文件
npm install aws-sdk

//安装之后,不要引入aws-sdk而是要引入下面这个命令,因为aws-sdk.js的文件是不健全的,没有Athena方法
var AWS = require('aws-sdk/dist/aws-sdk-react-native')

2.这样就完了,不,还有一个巨坑在前面!!!,因为Vue的Router方面了我们,但是它同样也修改了xhr的指向问题,导致接下来AWS中还会继续报错 xhr.upload.addEventListener is not a function 的错误,有兴趣的可以去看看xhr.upload.addEventListener解决方法

//在vue的modules的文件下找到mockjs文件下的dist/mock.js文件
//在第8308行创建一个新的对象来指定xhr.upload避免Router修改了xhr之后,咱们无xhr可用的问题

MockXMLHttpRequest.prototype.upload = xhr.upload;

3.AWS的方法不能在同一时间调用两个方法,不然会报错,基本上也不会同时使用两个方法,这里就简单提一下
4.AWS中使用了两个方法,并且其中一个修改了updata中的 endpoint 属性,那么为了你就需要给另外一个方法也进行修改,以免调用该方法的时候,url路径走的却是另外一个方法的

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值