Node.js HTTP:request';结束';事件从不被调用

Node.js HTTP:request';结束';事件从不被调用,http,node.js,Http,Node.js,我有一个客户端正在向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" }); }); }); 问题是“结束”事件从未触

我有一个客户端正在向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"
    });

  });

});
问题是“结束”事件从未触发

有人知道为什么吗


另外,如果我这样做,req.body是否将是所有body块的累加体?

基本上http POST仅在您向服务器发送邮件时触发。我不能确定,但我假设您只是试图访问web浏览器中的
服务器:端口/用户
,但没有得到响应。默认情况下,web浏览器是
GET
ing服务器。要解决这个问题,您有两个选择

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!!!');
  });
});
var express=require('express'),
app=express.createServer();
app.listen(1337,“127.0.0.1”);
app.get('/users',函数(req,res){
res.send(“”);
})
app.post('/users',函数(req,res){
请求on('end',function(){
console.log('success');
res.send('success!!!');
});
});

我遇到了同样的问题,并发现此讨论很有帮助:

简单地说,通过插入行:
request.on(“data”,function(){})

.createServer
循环内,但在
请求之后。on
循环使其工作。

您误解了。客户端正在触发POST请求。POST处理程序正在运行,问题是没有触发“end”事件,我不知道为什么。如果对我有效,请尝试重新安装node.js。我对形势作了最好的猜测。你发布的第一个代码也适用于我,只要我正确地发布到页面上。请你再做一些诊断。我也遇到了同样的问题-代码过去一直有效,现在经过一些升级后它停止工作了。如果不起作用,为什么你要将它标记为答案?如果我不得不大胆猜测,那就是req流被暂停,您需要使用
req.on('data',savethechunks)
取消暂停(我假设您需要手动保存块)@ajsie Chris T是正确的:对于任何想要了解更多有关原因的信息的人,请参阅这里(特别是关于流动和暂停模式的部分):