плоские утюги и Cloud9; окно - неопределенная ошибка?

Кому-нибудь еще повезло с использованием flatironjs с Cloud9 ide?

В моем файле server.js у меня есть:

require("coffee-script"); 
var app = require("./app");

app.listen(process.env.PORT);

Затем в моем файле app.coffee у меня есть:

flatiron = require "flatiron"
director = require "director"

app = flatiron.app
app.use flatiron.plugins.http

module.exports = app.router.get "/", ->
res.writeHead 200, { "Content-Type": "text/plain" }
res.end "Hello world!\n"

Когда я пытаюсь запустить это в IDE Cloud9, я получаю следующее:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        **^ ReferenceError: window is not defined**
    at Object. (/node_modules/flatiron/node_modules/broadway/node_modules/eventemitter2/lib/eventemitter2.js:547:63)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at require (module.js:355:19)
    at Object. (/node_modules/flatiron/node_modules/broadway/lib/broadway/app.js:11:14)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)

Если я создам стандартный http-сервер без использования flatiron, все будет работать отлично:

http = require "http"
module.exports = http.createServer (req, res) ->
res.writeHead 200, {'Content-Type': 'text/plain'}
res.end "Hello World\n"

Мысли?


person xspydr    schedule 14.03.2012    source источник


Ответы (2)


Это ошибка в EventEmitter, работающем на Solaris. Вы также можете увидеть это, если просто запустите приложение в последней версии Solaris, произойдет сбой с тем же сообщением об ошибке. Вы можете использовать исправленный EventEmitter2, который удаляет проверку для браузера.

Я создал для вас задачу.

person Jan Jongboom    schedule 16.03.2012
comment
Итак, я получил исправленный EventEmitter2, который избавил меня от проблемы с исходным окном undefined. Однако теперь я получаю сообщение о невозможности вызова метода «прослушивание» неопределенной ошибки. - person xspydr; 16.03.2012

Итак, в нижней части файла eventemitter2.js есть некоторый код, который в основном пытается быть «изоморфным» и работает как в node.js, так и в браузере. Он пытается угадать, какая среда определяется, проверяя следующие глобальные переменные:

  • процесс
  • процесс.название
  • экспорт

Если все они определены, eventemitter2 прикрепит свои экспортированные свойства к объекту exports для использования в node.js. В противном случае он прикрепит их к объекту window для использования в браузере.

По какой-то причине внутри cloud9 одна или несколько из этих трех глобальных переменных не определены, и он переходит в режим «браузера», предполагая, что window существует и терпит неудачу. Я недостаточно знаю о среде хостинга cloud9 ide, чтобы точно понять, какой из них (или 2, или 3) это и почему он отсутствует.

Ваш код vanilla http работает, потому что он не загружает eventemitter2, который загружается, когда вы используете flatiron, который зависит от Broadway, который зависит от eventemitter2.

person Peter Lyons    schedule 15.03.2012
comment
Правильно, я следую этому. Мне было более любопытно, смог ли кто-нибудь, кто использует Cloud9, запустить и запустить Flatiron. Я подтвердил, что объект процесса доступен. Однако, поскольку ошибка указывает, что объект окна не определен... - person xspydr; 15.03.2012
comment
как насчет process.title и экспорта? - person Peter Lyons; 15.03.2012
comment
process.title кажется пустым. Когда я пытаюсь выполнить console.log, ничего не появляется, но это не неопределенно. экспорт не является неопределенным. - person xspydr; 15.03.2012
comment
Хм. Странный. Попробуйте связаться с ребятами из cloud9 по электронной почте или через IRC. - person Peter Lyons; 15.03.2012
comment
Парень из Cloud9 здесь. Мы также узнали об этом, потому что мы используем навсегда для некоторых сервисов, и они больше не будут работать. Мы выпустили исправленную версию EventEmitter2 и сообщили об ошибке в этом проекте. - person Jan Jongboom; 16.03.2012
comment
Да, похоже, это было исправлено и объединено. github.com/hij1nx/EventEmitter2/pull/52 - person Peter Lyons; 19.03.2012