Почему в Node.js я не могу обработать запрос в обратном вызове request.addListener? - PullRequest
0 голосов
/ 22 ноября 2011

В моем обратном вызове слушателя сервера node.js (http.createServer(cb(response, request)) я пишу такой код:

if(request.url == "/upload") {
  request.addListener("end", function(){
    console.log("UPLOAD");
    var form = new formidable.IncomingForm();
    form.parse(request, function(err, fields, files) {
      response.writeHead(200, {"Content-Type" : "text/html"});
      response.write('received files: ');
      response.end();
   }); 
  });
}

И в моем индексе есть форма загрузки файла.Проблема в том, что консоль выводит UPLOAD, но ответ никогда не заканчивается.Браузер ждет до истечения времени ожидания.Если я напишу это:

if(request.url == "/upload") {
  var form = new formidable.IncomingForm();
  form.parse(request, function(err, fields, files) {
    response.writeHead(200, {"Content-Type" : "text/html"});
    response.write('received files: ');
    response.end();
  });
}

Все работает хорошо.Я знаю, что слушатель не нужен, но почему он не работает?

1 Ответ

1 голос
/ 22 ноября 2011

Хорошо, что слушатель срабатывает, когда все события данных были отправлены, уже поздно для грозного начала слушать события. Что грозно, так это то, что он начинает слушать события, когда все завершено, он вызывает обратный вызов. В этом случае после отправленного события end данные не будут отправляться, а грозный ожидает получения чего-либо, но ничего не получает.

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