1

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

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除非我遗漏了什么。

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

4

1 回答 1

3

这似乎是一个“功能”。它实际上是要在正文中使用的编码,但 net 模块的工作方式是第二个参数是可选的回调。栈是这样的(约)

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

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

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

于 2013-07-16T23:15:16.963 回答