#node.js #amazon-simpledb
#node.js #amazon-simpledb
Вопрос:
Я запускаю следующий код:https://github.com/rjrodger/simpledb
var simpledb = require('simpledb');
var sys = require('sys');
sdb = new simpledb.SimpleDB({keyid:'kye'
,secret:'mysectkey'});
var str="select * from youngib where createdon is not null order by createdon desc limit 10";
sdb.select (str, function( error, result ) {
console.log('attr1 = ' sys.inspect(error));
console.log('result = ' sys.inspect(result));
});
если я запускаю это в отдельном файле, оно запускается, но если я запускаю в своем проекте, это выдает мне эту ошибку, почему возникает эта ошибка?
{ Code: 'SignatureDoesNotMatch',
Message: 'The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.' }
проблема заключалась в том, что там у меня есть declare
Array.prototype.in_array = function(p_val) {
for(var i = 0, l = this.length; i < l; i ) {
if(this[i] == p_val) {
return true;
}
}
return false;
}
из-за этого не выполнялся simpledb, я не знаю почему, если вы знаете, пожалуйста, скажите мне.
Ответ №1:
При расширении Array.prototype
могут возникнуть проблемы с for ... in
циклами.
Например:
Array.prototype.foo = 42;
var array = [1,2,3];
for (var index in array) {
console.log(index "," array[index]);
// logs 0,1 1,2 2,3 foo,42
}
Цикл for in выполняет итерацию по всем свойствам. Таким образом, в основном ваш сторонний код делает предположение, что вы не расширили Array.prototype
.
Расширение собственных прототипов является плохой практикой по этим причинам.
Что касается вашего in_array
метода, вы могли бы использовать
var contains = someArray.some(function(val) {
return val === p_val;
});
вместо этого.