我是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
事件,为什么还要使用它呢?一个新手问题。
答案 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);