"现在无法切换到旧模式“-tls.connect函数中出现Node.JS apn模块错误
"Cannot switch to old mode now" - Node.JS apn module error in tls.connect function
我正在尝试实现Node.JS apn模块,以连接到APNS(苹果推送通知服务),从运行Ubuntu 12.04的亚马逊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)"
当我调用apn模块函数来推送通知时。然而,当我在一个写在文件中的函数中做同样的事情并执行该文件时,它就可以正常工作了。请帮忙。我该如何着手解决这个问题?
更新:自从最初编写此答案以来,下面描述的行为可能已经发生了变化;从0.12.3
开始,文档建议您现在可以在暂停(新)和流动模式(旧)之间来回切换,并且流以停止的模式开始
此外,"old"错误地暗示了一种不受欢迎的做事方式,但尽管流动模式是第一位的,但两者都受到支持并有各自的用途。
我没有具体的答案,但有一个一般的解释:
简而言之:在可读流上调用.resume()
或.pause()
的旧代码可以在节点0.10
或更高版本上中断
它的长度:当可读流已初始化为使用新的、暂停的模式(基于readable
事件),并且稍后尝试切换到旧的、流动的模式(基于data
事件)时,您会在节点0.10
或更高版本上看到此错误,当您调用.resume()
或.pause()
时会隐式尝试切换-请参阅文档。
甚至可能不直接涉及设置readable
事件。例如,使用.pipe()
方法现在似乎隐式地切换到新的暂停模式,因此随后的.resume()
调用将触发此错误。
不确定这是否是解决问题的"正确"方法,但它对我有效
brew uninstall node
brew install nvm
- 将其复制到您的shell配置中(在我的例子中是.zshrc)
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
nvm install iojs
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- mongoose.connect undefined不是一个函数
- TypeError:io.connect不是函数
- "现在无法切换到旧模式“-tls.connect函数中出现Node.JS apn模块错误
- 错误:connect.compress不是一个函数
- React-redux, connect函数不使用新数据更新状态
- Connect app (node.js)对象不是一个函数
- 将函数引用或函数名传递给_Widget.connect()时的不同行为
- Node.Js connect.use()不是一个函数