"Невозможно переключиться на старый режим" - Node.JS ошибка модуля apn в функции tls.connect
Я пытаюсь внедрить модуль Node.JS apn для подключения к APNS (службе уведомления Apple Push) для push-уведомления iPhone-устройств с сервера Node (с помощью ExpressJS), размещенного на экземпляре Amazon EC2 с Ubuntu 12.04. Я получаю эту ошибку:
"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 для push-уведомления.
Однако, когда я делаю то же самое в функции, написанной в файле, и выполняю этот файл, тогда он работает отлично. Пожалуйста помоги. Как мне решить проблему?
Ответы
Ответ 1
Обновить. Поведение, описанное ниже, возможно, изменилось, поскольку этот ответ был первоначально написан; с 0.12.3
, docs позволяют предположить, что теперь вы можете переключаться между приостановленным (новым) и текущим (старым) режимом, и эти потоки начинаются с паузы режим.
Кроме того, "старый" ошибочно предлагает устаревший способ делать что-то, но в то время как поток идет первым, оба поддерживаются и имеют свои возможности.
У меня нет конкретного ответа, но общее объяснение:
Короче: старый код, который вызывает .resume()
или .pause()
на читаемых потоках, может разбиться на node 0.10
и выше.
Долгое время:
Вы видите эту ошибку на node 0.10
или выше, когда прочитанный поток был инициализирован для использования нового, приостановленного режима (на основе события readable
), и попытка позже переключитесь на старый, текущий режим (на основе события data
), который неявно пытается, когда вы вызываете .resume()
или .pause()
- см. документы.
Настройка события readable
может быть даже не связана напрямую.
Например, кажется, что использование метода .pipe()
теперь неявно переключается на новый, приостановленный режим, поэтому последующий вызов .resume()
вызовет эту ошибку.
Ответ 2
Не уверен, что это правильный способ устранить проблему, но это сработало для меня. (Вам нужно будет brew)
-
brew uninstall node
-
brew install nvm
- скопируйте это в конфигурацию вашей оболочки (в моем случае .zshrc)
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
-
nvm install iojs