11

我正在尝试实现 Node.JS apn 模块以连接到 APNS(Apple 推送通知服务),以便从运行 Ubuntu 12.04 的 Amazon EC2 实例上托管的 Node 服务器(使用 ExpressJS)向 iPhone 设备推送通知。我收到此错误:

"Error: Cannot switch to old mode now.",
"    at emitDataEvents (_stream_readable.js:720:11)",
"    at ReadStream.Readable.resume (_stream_readable.js:705:3)",
"    at TLSSocket.<anonymous> (/home/ubuntu/usemebeta/routes/message.js:101:48)",
"    at TLSSocket.g (events.js:186:14)",
"    at TLSSocket.EventEmitter.emit (events.js:97:17)",
"    at TLSSocket.<anonymous> (_tls_wrap.js:579:16)",
"    at TLSSocket.EventEmitter.emit (events.js:97:17)",
"    at TLSSocket._finishInit (_tls_wrap.js:198:8)"

当我调用 apn 模块函数来推送通知时。但是,当我在文件中编写的函数中执行相同的操作并执行该文件时,它就可以正常工作。请帮忙。我应该如何解决问题?

4

2 回答 2

20

更新:自最初编写此答案以来,下面描述的行为可能已经改变;截至0.12.3文档建议您现在可以在暂停(新)和流动(旧)模式之间来回切换,并且流以暂停模式开始。
此外,“旧”错误地暗示了一种已弃用的做事方式,但虽然流动模式首先出现,但两者都受到支持并有其用途。


我没有具体的答案,但有一个笼统的解释:

简而言之:调用.resume().pause()可读流的旧代码可能会在节点0.10和更高版本上中断。

长篇大论:0.10当可读流被初始化为使用新的暂停模式(基于readable事件)并且稍后尝试切换到旧的流动模式(基于事件data),当您调用.resume()或时会隐式尝试.pause()- 请参阅文档

readable甚至可能不直接涉及设置事件。例如,现在使用该.pipe()方法似乎隐式切换到新的暂停模式,因此后续.resume()调用将触发此错误。

于 2013-11-24T21:15:46.783 回答
0

不确定这是否是解决问题的“正确”方法,但它对我有用。(你需要有brew

  1. brew uninstall node
  2. brew install nvm
  3. 将其复制到您的 shell 配置中(在我的情况下为 .zshrc)

export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh

  1. nvm install iojs
于 2015-04-16T08:54:40.590 回答