2012-03-14 3 views
0

Кому-то еще повезло, используя flatironjs с Cloud9 ide?flatironjs и Cloud9; window - неопределенная ошибка?

В моих 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" 

При попытке запустить это в Cloud9 IDE Я получаю следующее:

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" 

Мысли?

ответ

1

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

Я создал an issue для вас.

+0

Итак, получил исправленный EventEmitter2, который заставляет меня пройти через исходное окно неопределенной проблемы. Однако теперь я получаю сообщение «Не могу вызвать метод» прослушать неопределенную ошибку. – Jason

+0

Наконец-то он работает! – Jason

1

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

  • процесс
  • process.title
  • экспорт

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

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

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

+0

Правильно, я следую за этим. Мне было более любопытно, сможет ли кто-нибудь, кто использует Cloud9, получить работу в режиме реального времени. Я подтвердил, что объект процесса доступен. Однако, поскольку ошибка указывает, что объект окна не определен ... – Jason

+0

как насчет process.title и экспорта? –

+0

Образец process.title выглядит пустым. Когда я пытаюсь console.log, ничего не появляется, но это не является неопределенным. экспорт не является неопределенным. – Jason