0

RingoJSで非常に奇妙な問題が発生しました。に保存されている次のコードについて考えてみますmain.js

var {Application} = require("stick");
var {main} = require("ringo/httpserver");
var app = exports.app = new Application;
app.configure("error", "notfound");
if (module === require.main)
    main(module.id);

実行ringo main.jsすると、httpサーバーがhttp://localhost:8080/期待どおりに起動し、デフォルトのnotfoundページが表示されます。

ifここで、条件を次のようにハードコーディングしたことを除いて、上記と同じ次のコードについて考えてみますtrue

var {Application} = require("stick");
var {main} = require("ringo/httpserver");
var app = exports.app = new Application;
app.configure("error", "notfound");
if (true) main(module.id);

実行ringo main.jsするとhttpサーバーが起動しますが、サイトを開くと、errorページではなくnotfoundページが表示されます。それはWrapped java.net.BindException: Address already in use私に次のスタックトレースを言い、与えます:

at ringo/httpserver.js:327 (Server)
at ringo/httpserver.js:428 (init)
at ringo/httpserver.js:506 (main)
at /home/aaditmshah/main.js:5
at ringo/jsgi/connector.js:28 (handleRequest)

何が起こっていますか?状態はサーバーにどのようifに影響しますか?結局のところ、両方の条件が値を表しますtrue(これがhttpサーバーが機能する理由です)。これは私をひどく混乱させました。バグですか?

4

1 に答える 1

1

入ってくるリクエストは、スクリプトの2番目のバージョンでメインモジュールを再実行します。「if(module === require.main)」と書くのには理由があります。このページの下部を参照してください:http://ringojs.org/tutorial/httpserver.md

于 2013-06-19T09:21:16.093 に答える