在node.js中,“request.on”中的“.on”是什么意思?

30

我是node.js和JavaScript的新手,我不明白这个".on"关键字的含义。当我用其他单词替换它时,代码会失败。

var req = http.get("http://www.google.com", function(res) {
  console.log("Got response: " + res.statusCode);

 res.on('data', function (chunk) {
});

}).on('error', function(e) {
console.log("Got error: " + e.message);
 });
3个回答

40

on方法将事件绑定到对象上。

这是一种表达意图的方式,如果发生某些事情(例如你的数据已发送或出现错误),那么执行作为参数添加的函数。这种编程风格称为事件驱动编程。您可能需要在维基百科中查找相关信息。

在 node.js 中,有一个名为 EventEmitter 的类,如果您决定在自己的代码中使用它们(在 node.js 的情况下强烈建议这样做),它会为您提供所有基本的事件代码。有关 node.js EventEmitter 的文档可以在此处找到。


13

.on是一种绑定事件处理程序的方法。


谢谢,我想我还没有熟悉Node.js文档。 - avicennasoftwarelabs
查看关于 stream 的文档。HTTP 请求的结果是一个可读的 stream,将拥有所有与此类相关的事件和方法。 - ebohlman
当POST请求完成时,是否有任何事件可以监听? - Jeyanth

10
http.get的回调函数会带有一个单一参数(你已经命名为req)。req是“请求”的缩写,这是一个常见的名称,因为该参数是一个http.ClientRequest对象。http.ClientRequest对象实现了stream.Writable,而这里最重要的部分是:所有的流都是EventEmitter实例。

EventEmitter有一个名为on的函数,它为指定的事件添加一个监听器函数。

“监听器函数”只是另一个名字,称之为“回调函数”。

在你的示例中,你已经添加了一个监听器来监听data事件和error事件。监听器函数由EventEmitter“调用”(因此称为“回调”)。

额外学习

如果你需要让监听器停止监听(也就是说,你不再想调用你的回调函数),你可以使用emitter.removeListener函数来删除一个监听器。

var myCallback = function(e) { console.log('Got error: ' + e.message); }
res.on('error', myCallback);
// do some things...
res.removeListener('error', myCallback);
如果您只想让一个监听器运行一次,可以使用 emitter.once 替代 on 函数,这样就不需要将其删除:
res.once('error', myCallback);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接