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

我有一个客户端发送数据块到我的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" }); }); }); 

问题是,“结束”事件永远不会被解雇。

有人知道为什么

而且,如果我这样做,请求的身体是否会成为所有身体块的累积体?

基本上,只有POST POST到服务器时才会触发HTTP POST。 我不能确定,但​​我假设你只是试图访问您的Web浏览器中的server:port/users ,并得不到答复。 默认情况下,Web浏览器正在GET服务器。 要解决这个问题,你有两个select。

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

2.或者你可以使用一个表单来启动邮政function。 例如,如果您使用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!!!'); }); }); 

我遇到了同样的问题,并发现这个讨论很有帮助: 我的http.createserver在node.js不起作用?

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