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

ajs*_*sie 12 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"
    });

  });

});
Run Code Online (Sandbox Code Playgroud)

问题是'end'事件永远不会被触发.

谁知道为什么?

另外,如果我这样做,那么req.body是否是所有身体块的累积体?

Lim*_*ime 3

基本上,http POST 仅在您 POST 到服务器时才会触发。我不能确定,但​​我假设您只是尝试server:port/users在网络浏览器中访问,但未能获得响应。默认情况下,Web 浏览器正在GET连接服务器。要解决此问题,您有两种选择。

1.如果更改app.postapp.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!!!');
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 你误会了。客户端正在触发 POST 请求。POST 处理程序已运行,问题是“结束”事件未触发,我不知道为什么。 (2认同)
  • @ajsie Chris T 是正确的:https://nodejs.org/api/stream.html#stream_compatibility_with_older_node_js_versions (2认同)