Node.js - res.end和res.write可以接受回调函数

时间:2013-07-16 23:01:58

标签: node.js callback

使用Node.js创建基本HTTP服务器时,我注意到'res.write'对象的res.endhttp.ServerResponse方法都可以接受这样的回调函数:< / p>

require('http').createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});

    res.write('Hello ', function() { console.log('here 1'); });
    res.end(' World', function() { console.log('here 2'); });
}).listen(1337, '127.0.0.1');

'Hello World'在浏览器中输出,'here 1'和'here 2'输出到终端。

但是,这些回调参数没有记录在任何地方,例如http://nodejs.org/api/http.html#http_response_end_data_encoding,除非我遗漏了什么。

我真的可以使用这些回调函数吗?我有一个有趣的用例。或者它们是一些内部使用的东西,应该避免吗?

1 个答案:

答案 0 :(得分:3)

这似乎是一个“功能”。它实际上是指在主体中使用的编码,但网络模块的工作方式是第二个参数是可选的回调。 堆栈就像这样(约)

res.write(data, encoding)
res._send(data, encoding)
res._writeRaw(data, encoding)
res.socket.write(data, encoding, cb)

在最后一点,参数的数量从2变为3.数据和编码为数据,编码,可选回调。所以发生的事情是你的函数(作为编码参数)被传递给socket.write,其中编码可以是可选的。

这可能被视为一个错误,因为您无法从响应写入方法中推送所有三个参数。我建议非常小心地使用它。