flatironjs и Cloud9; окно не определено ошибка? - PullRequest
0 голосов
/ 14 марта 2012

Кому-нибудь еще повезло с использованием 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"

Когда я пытаюсь запустить это в 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"

Мысли

Ответы [ 2 ]

1 голос
/ 16 марта 2012

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

Я создал проблему для вас.

1 голос
/ 15 марта 2012

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

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

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

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

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

...