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