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

进来的请求将在您的脚本的第二个版本中重新执行您的主模块。我们写“if (module === require.main)”是有原因的,请参阅本页底部:http ://ringojs.org/tutorial/httpserver.md

于 2013-06-19T09:21:16.093 回答