работает select в simpledb с node.js, выдающим ошибку - PullRequest
0 голосов
/ 02 мая 2011

Я выполняю следующий код: 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.' } 

проблема заключалась в том, что там я объявил

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 Ответ

2 голосов
/ 11 мая 2011

Если вы расширяете 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;
});

вместо.

...