Node.js – res.end和res.write可以接受一个callback函数

当用Node.js创build一个基本的HTTP服务器时,我注意到' http.ServerResponse '对象的res.writeres.end方法都可以接受一个callback函数,如下所示:

 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'输出到terminal。

然而,这些callback参数没有logging在任何地方,例如http://nodejs.org/api/http.html#http_response_end_data_encoding,除非我失去了一些东西。

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

这似乎是一个“function”。 它实际上是要在身体中使用的编码,但净模块工作的方式是第二个参数是一个可选的callback。 堆栈就像这样(大约)

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

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

这可能被认为是一个错误,因为您不能从响应写入方法中推送所有三个参数。 我build议小心使用它。