无论是否有请求的结束事件,有什么区别?

时间:2013-08-23 09:03:35

标签: javascript node.js

我是Node.js的新手。我想知道这两段代码之间的区别是什么:

var http = require("http");

http.createServer(function(request,response) {
    request.addListener("end", function(){
        console.log(request);
    });

}).listen(8888);

var http = require("http");

http.createServer(function(request,response) {

    console.log(request);

}).listen(8888);

换句话说,由于每次服务器完成接收数据时都会触发end事件,为什么还要使用它呢?一个新手问题。

3 个答案:

答案 0 :(得分:2)

我不是NodeJS专家,但以下文档中的逻辑流程。

考虑上传大文件的请求。当请求首次到达服务器时,将调用您传递到createServer的回调;请求完全发送后,end对象上的request事件(继承自ReadableStream)将触发。这将是相当不同的时期。

答案 1 :(得分:2)

您的第二个代码可能无法达到预期效果,因为每次有传入请求时都会运行console.log(...)。但是无法确定请求是否已经完成(即完全发送到服务器) 每次关闭连接并且请求完成时(即每次有人请求数据),您的第一个代码都会运行console.log(...)。然后,您可以使用传输的数据。所以你可能想要使用的(通常在处理请求时使用)是第一个代码。

答案 2 :(得分:1)

如果要向此服务器发送任何数据,则意味着您必须使用该request.listener来获取该数据。

 var http = require("http");

 http.createServer(function(req,response) { 

 req.on('data', function (chunk) {

      body += chunk;

  });

  req.on('end', function () {

      console.log('POSTed: ' + querystring.parse(body).urDataName);

      var data=querystring.parse(body).urData;//here u can get the incoming data

     });

 }).listen(8888);