запуск select в simpledb с node.js выдача ошибки

#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;
});
  

вместо этого.