Подтвердить что ты не робот

Node.js HTTP: запрос "конец" никогда не вызывается

У меня есть клиент, который отправляет куски данных на мой сервер node.js.

Я хочу прослушать событие "end" и получить накопленный тело запроса.

Вот мой код:

app.post('/users', function(req, res){

  req.on('end', function() { // WHY IS THIS NEVER FIRED?
    console.log(req.body);

    res.send({
      "status": "ok"
    });

  });

});

Проблема в том, что событие "end" никогда не запускается.

Кто-нибудь знает, почему?

Кроме того, если я сделаю так, будет ли req.body быть накопленным телом всех кусков тела?

4b9b3361

Ответ 1

В основном HTTP POST запускается только при отправке POST на сервер. Я не могу быть уверен, но я предполагаю, что вы просто пытаетесь посетить server:port/users в своем веб-браузере и не можете получить ответ. По умолчанию веб-браузер имеет GET сервер. Чтобы исправить это, у вас есть две возможности.

1. Если вы измените app.post на app.get, событие будет правильно срабатывать при посещении /users

2. Или вы можете запустить функцию post с помощью формы. Например, следующий код отобразит форму, если вы заходите на страницу с помощью GET. Когда вы отправите форму, она запустит POST.

var express = require('express'),
    app = express.createServer();

app.listen(1337, "127.0.0.1");

app.get('/users',function(req,res){
  res.send('<form method="post" action="/users"><input type="submit" value="Submit" /></form>');
})

app.post('/users', function(req, res){
  req.on('end', function() {
    console.log('success');
    res.send('success!!!');
  });
});

Ответ 2

Я столкнулся с той же проблемой и нашел это обсуждение полезным: Мой http.createserver в node.js не работает?

Проще говоря, вставив строку: request.on("data",function() {}) внутри цикла .createServer, но после того, как цикл request.on заставил его работать.