CNode

新手求问一个事件监听问题

Zzycralf发布于12 年前最后回复12 年前6 回复7523 浏览0 收藏

问一个问题 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)

T
telnetning#1·12 年前

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

Z
zycralf#2·12 年前

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

Z
zycralf#3·12 年前

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

P
Pana#4·12 年前
引用 zycralf那请问能不能写成 request.ondata=function{}呢

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

Z
zengwenbing#5·12 年前

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

Z
zycralf#6·12 年前

谢谢大神解释

参与回复
登录后即可参与回复。登录