node.js + ошибка подключения 404 - PullRequest
5 голосов
/ 08 ноября 2010

Я только начал изучать 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"); });

Если я вызываю / 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

1 Ответ

1 голос
/ 12 марта 2011

Вот объяснение этой ошибки (ниже приведен указатель на исправление).

Причина в том, что логика маршрутизации библиотеки Connect сохраняет состояние (индекс текущего маршрута) как свойство в функции обратного вызова. В вашем тестовом случае, когда обратный вызов зарегистрирован для второго маршрута, «/ fail1», этот переопределяет состояние, установленное маршрутом для «/ fail0». Поэтому входящий запрос для fail0 завершается неудачно.

Эта ошибка была зарегистрирована в списке экспресс-рассылки в этой теме .

Исправление было совершено в этой вилке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...