Node.js HTTP:永远不会调用请求'end'事件

时间:2011-07-07 03:01:51

标签: http node.js

我有一个客户端正在向我的node.js服务器发送数据块。

我想听“结束”事件并检索累积的请求正文。

这是我的代码:

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是否是所有身体块的累积体?

2 个答案:

答案 0 :(得分:2)

基本上,只有POST POST到服务器时才会触发http POST。我无法确定,但我假设您只是试图在您的网络浏览器中访问server:port/users而未能得到回复。默认情况下,Web浏览器是GET服务器。要解决此问题,您有两种选择。

1。如果您将app.post更改为app.get,则在您访问/users时会正确触发事件

2. 或者您可以使用表单触发帖子功能。例如,如果您使用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!!!');
  });
});

答案 1 :(得分:2)

我遇到了同样的问题,发现这个讨论很有帮助: My http.createserver in node.js doesn't work?

简单地说,通过插入行: request.on("data",function() {}).createServer循环内但在request.on循环之后使其工作。