还有其他人在使用带有Cloud9 ide的flatironjs时运气好吗?
在 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)
如果我在不使用flatiron的情况下创建标准的http服务器,一切都很棒:
http = require "http"
module.exports = http.createServer (req, res) ->
res.writeHead 200, {'Content-Type': 'text/plain'}
res.end "Hello World\n"
思想?
答案 0 :(得分:1)
所以在bottom of that eventemitter2.js file处有一些代码基本上试图成为“同构”并且在node.js和浏览器中都有效。它试图通过测试定义的以下全局变量来猜测哪个环境:
如果定义了所有这些,则eventemitter2会将其导出的属性附加到exports
对象,以便在node.js中使用。否则,它会将它们附加到window
对象以便在浏览器中使用。
出于某种原因,在cloud9中,没有定义这3个全局变量中的1个或更多,并且它正在分支到“浏览器”模式,假设window
存在且失败。我对cloud9 ide托管环境知之甚少,无法准确了解它们中的哪一个(或2个或3个)以及它丢失的原因。
你的vanilla http
代码有效,因为它不会加载eventemitter2,当你使用flatiron时会加载它,这取决于broadway,它取决于eventemitter2。
答案 1 :(得分:1)
这是在Solaris上运行的EventEmitter中的错误。如果您只是在最新版本的Solaris上运行应用程序,您也可以看到它,并将使用相同的错误消息崩溃。您可以使用patched EventEmitter2删除对浏览器的检查。
我为你创建了an issue。