新手求问一个事件监听问题
发布于 10 年前 作者 zycralf 6172 次浏览 最后一次编辑是 8 年前

问一个问题 Node入门 里面有个例子,处理POST请求的时候 可以注册监听器 request.addListener(“data”, function(chunk) { // called when a new chunk of data was received });

request.addListener(“end”, function() { // called when all chunks of data have been received });

data事件代表post数据来到 end事件代表数据接收完

但是在程序里怎么知道什么时候出发data事件,什么时候触发end事件呢 代码是 var http = require(“http”); var url = require(“url”);

function start(route, handle) { function onRequest(request, response) { var postData = “”; var pathname = url.parse(request.url).pathname; console.log(“Request for " + pathname + " received.”);

request.setEncoding("utf8");

request.addListener("data", function(postDataChunk) {
  postData += postDataChunk;
  console.log("Received POST data chunk '"+
  postDataChunk + "'.");
});

request.addListener("end", function() {
  route(handle, pathname, response, postData);
});

}

http.createServer(onRequest).listen(8888); console.log(“Server has started.”); }

exports.start = start; 难道data和end事件本来就存在?注册了就能用?否则以上面代码看,怎么知道什么时候触发data和end? 如果不是,那事件名字可以随便取吗?

6 回复

data與end是request本身的事件,名字是固定的,是不能改的。當有數據到來的時候data事件就被觸發,數據結束的時候end事件就被觸發。

谢谢 感觉就是写onclick事件那样是吧

那请问能不能写成 request.ondata=function{}呢

不能这样写, node跟前端还是有区别的

node有几种流,文件流(createReadStream) 输出流(stdout) 响应流(res) 语法结构都是继承于events.EventEmitter的 eventemitter内部提供了观察者模式的事件注册(on 函数) 本质和前端js事件绑定是不同的 node中还可以用addListener来替换on达到同样的事件注册

谢谢大神解释

回到顶部