0

Nodejs アプリに Authy をインストールしましたが、プラグイン内から突然これらの大きなエラー メッセージが表示されるまで、うまく機能していました。copyモジュールが欠落しているように見えますが、npm install copy npm update copy役に立ちませんでした。

[TypeError: Object function (comparer) {
for(var i=0; i < this.length; i++) {
    if(comparer(this[i])) return true;
}
return false;
} has no method 'copy']
TypeError: Object function (comparer) {
for(var i=0; i < this.length; i++) {
    if(comparer(this[i])) return true;
}
return false;
} has no method 'copy'
at IncomingMessage.<anonymous> (/home/.../node_modules/authy-node/authy.js:166:13)
at IncomingMessage.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at args.(anonymous function)     (/home/.../node_modules/nodetime/lib/core/proxy.js:131:20)
at process._tickCallback (node.js:415:13)

コピーが正しくインストールされていない可能性はありますか...?

$ npm install copy
npm WARN package.json copy@0.0.1 No repository field.
npm WARN package.json eyes@0.1.8 No repository field.
npm http GET http://registry.npmjs.org/copy
npm http 304 http://registry.npmjs.org/copy
copy@0.0.1 node_modules/copy
4

1 に答える 1

0

アップデート

Authy は私のプル リクエストをマージし、npm パッケージを更新しました。上記のシナリオは、Array プロトタイプが拡張された場合でも機能するはずです。

元の回答

コピーモジュールとは関係ありません。sourceに基づくと、これは実際には、javascript 内の 2 つの別々の不適切な事例によるものです。1 つ目は、authy がfor .. inループを使用して配列リテラルを反復処理するためです。スローされた例外によって証明されるように、これは悪いことです。彼らは、data.length に基づく標準の for ループを使用する必要がありました。authy モジュールでこの問題を修正するプル リクエストをリポジトリに送信しました。

では、なぜ例外がスローされたのでしょうか。これは、2 つ目の悪い習慣につながります。JavaScript でネイティブ オブジェクトを拡張しないでください。誰かがどこか (おそらくあなたのコードや別のモジュール) で Array プロトタイプを拡張しました。例外に示されている関数に基づいて:

function (comparer) {
  for(var i=0; i < this.length; i++) {
    if(comparer(this[i])) return true;
  }
  return false;
}

ここで説明されているように、誰かが inArray で Array を拡張したようです: Array.push() if does not exist?

それを行っているコードを見つけて削除できれば、authy は再び動作を開始するはずです。

于 2014-04-29T00:49:41.597 に答える