5
我剛開始學習node.js.我有以下的(服務器)樣本:node.js +連接404錯誤
var app = require("express").createServer();
app.listen(80);
function fail(req, res, next) { setTimeout(next, 10); }
function success() {
return function(req, res, next) { setTimeout(next, 10); };
}
app.get("/success0", success(), function(req, res, next) { res.send("0"); });
app.get("/success1", success(), function(req, res, next) { res.send("1"); });
app.get("/fail0", fail, function(req, res, next) { res.send("0"); });
app.get("/fail1", fail, function(req, res, next) { res.send("1"); });
如果我打電話/ fail0同時/ FAIL1,他們中的一個會成功,另一個失敗,404錯誤。然而,調用/ success0和success1可行。有人能告訴我爲什麼一個人工作,另一個人不工作?下面是我的測試客戶端:
var http = require("http");
var sys = require("sys");
for(var i = 0; i < 10; i++) {
var io = http.createClient(80, "localhost");
var request = io.request("GET", "/fail" + (i%2), {host:"localhost"});
request.on("response", function(response) {
var body = "";
response.on("data", function(data) { body += data; });
response.on("end", function() {
sys.puts(response.statusCode + ":" + body);
});
}).end();
}
上述客戶端返回運行:
404:Cannot GET /fail0 200:1 404:Cannot GET /fail0 200:1 404:Cannot GET /fail0 200:1 404:Cannot GET /fail0 200:1 404:Cannot GET /fail0 200:1
有趣的問題。我可以在這裏重現這一點,但我不知道如何解決它。它似乎取決於「失敗」的重用。如果將'fail'克隆爲兩個函數'fail0'和'fail1',那麼它就可以正常工作。必須與Express或Connect的路由器或中間件邏輯有關,但我無法確定它是什麼。 – RandomEtc 2011-01-03 09:39:26