我有一个客户端正在向我的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是否是所有身体块的累积体?
答案 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
循环之后使其工作。