node.js +连接404错误

use*_*366 5 connect node.js

我刚开始学习node.js. 我有以下(服务器)示例:


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"); });
Run Code Online (Sandbox Code Playgroud)

如果我同时调用/ 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();
}
Run Code Online (Sandbox Code Playgroud)

在客户端上运行返回:

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

ali*_*ard 1

以下是对此错误的解释(下面是指向修复程序的指针)。

原因是 Connect 库的路由逻辑将状态(当前路由的索引)存储为函数回调中的属性。在您的测试用例中,当为第二个路由“/fail1”注册回调时,该回调将覆盖“/fail0”路由设置的状态。因此,对fail0 的传入请求失败。

此错误已在此线程的快速邮件列表中报告。

在此分支中进行了修复。