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 原型,上述场景现在也应该可以工作。

原始答案

这与复制模块无关。根据来源,这实际上是由于 javascript 中的两个不同的不良实践实例造成的。第一个是由于 authy 使用for .. in循环来迭代数组文字。这是一件坏事,正如抛出的异常所证明的那样。他们应该使用基于 data.length 的标准 for 循环。我已经向 repo 提交了一个pull request,它将在 authy 模块中解决这个问题。

那么为什么会抛出异常呢?这导致我们出现第二个不好的做法。您不应该在 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 doesn't exist?

如果您可以找到执行此操作的代码并将其删除,则 authy 应该重新开始工作。

于 2014-04-29T00:49:41.597 回答