"现在无法切换到旧模式" - tls.connect函数中的Node.JS apn模块错误

aja*_*jay 11 javascript stream node.js

我正在尝试实现Node.JS apn模块以连接到APNS(Apple推送通知服务),以便从运行Ubuntu 12.04的Amazon EC2实例上托管的节点服务器(使用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)"
Run Code Online (Sandbox Code Playgroud)

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

mkl*_*nt0 20

更新:由于此答案最初编写,因此下面描述的行为可能已更改; 截止到0.12.3,文档建议您现在可以在暂停(新)和流动(旧)模式之间来回切换,并且流在暂停模式下开始.
此外,"旧"错误地暗示了一种弃用的做事方式,但是当流动模式出现时,两者都得到支持并具有其用途.


我没有具体的答案,但一般的解释:

缺点:调用.resume().pause()在可读流上的旧代码可以在节点0.10和更高的节点上中断.

其中很长时间:0.10当可读流已初始化为使用新的暂停模式(基于readable事件)并且稍后尝试切换到旧的流动模式时(基于此),您会在节点或更高版本上看到此错误该data事件),当你调用它隐含企图.resume().pause()-看文档.

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