【问题标题】:Node.js HTTP: request 'end' event is never calledNode.js HTTP:从不调用请求“结束”事件
【发布时间】:2011-07-07 03:01:51
【问题描述】:

我有一个客户端正在向我的 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 会是所有body chunks 的累积体吗?

【问题讨论】:

    标签: http node.js


    【解决方案1】:

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

    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!!!');
      });
    });
    

    【讨论】:

    • 你误会了。客户端正在触发 POST 请求。 POST 处理程序已运行,问题是未触发“结束”事件,我不知道为什么。
    • 对我有用,尝试重新安装 node.js。我对这种情况做了最好的猜测。只要我正确发布到页面,您发布的第一个代码也适用于我。请您再做一些诊断。
    • 我也遇到了同样的问题 - 以前的代码可以永远工作,现在经过一些升级后它就停止工作了
    • 如果这不起作用,您为什么将其标记为答案?如果我不得不冒险猜测,那就是 req 流已暂停,您需要使用 req.on('data', savethechunks) 取消暂停(我假设您需要手动保存块)
    • @ajsie Chris T 是正确的:nodejs.org/api/…
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2019-07-26
    • 1970-01-01
    • 2011-08-14
    • 2019-12-16
    • 2015-01-09
    • 1970-01-01
    相关资源
    最近更新 更多