0

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"

これをCloud9IDEで実行しようとすると、次のようになります。

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"

考え?

4

2 に答える 2

1

そのため、そのeventemitter2.jsファイルの下部に、基本的に「同形」であり、node.jsとブラウザーの両方で機能しようとするコードがいくつかあります。定義されている次のグローバル変数をテストすることにより、どの環境を推測しようとします。

  • 処理する
  • process.title
  • 輸出

これらすべてが定義されている場合、eventemitter2は、node.jsexportsで使用するために、エクスポートされたプロパティをオブジェクトにアタッチします。windowそれ以外の場合は、ブラウザで使用するためにオブジェクトにアタッチします。

cloud9内で何らかの理由で、これら3つのグローバル変数の1つ以上が定義されておらず、window存在して失敗していると想定して「ブラウザー」モードに分岐しています。私はcloud9ideホスティング環境について十分に知りません。それがどれであるか(または2つまたは3つ)、そしてなぜそれが欠落しているのかを正確に理解することはできません。

バニラhttpコードは、eventemitter2に依存するブロードウェイに依存するflatironを使用するときにロードされるeventemitter2をロードしないために機能します。

于 2012-03-15T04:56:28.833 に答える
1

これは、Solarisで実行されているEventEmitterのバグです。最新バージョンのSolarisでアプリを実行しただけでも、同じエラーメッセージが表示されてクラッシュすることがわかります。ブラウザのチェックを削除するパッチが適用されたEventEmitter2を使用できます。

私はあなたのために問題を作成しました。

于 2012-03-16T15:07:28.970 に答える