为什么要在http.createServer()中返回值呢

Why bother returning a value in http.createServer()

本文关键字:返回值 createServer http 为什么      更新时间:2023-09-26

我正在参加learnyounode研讨会,我对其中一个官方解决方案中的这个片段很好奇。

var server = http.createServer(function (req, res) {
  if (req.method != 'POST')
    return res.end('send me a POST'n')
})

我只是好奇他们为什么要麻烦返回一个值。您可以直接调用res.end(),它将按预期工作(正如我所期望的)。看起来end()只是返回一个布尔值,但我不明白你为什么需要或想要返回任何东西。

传递给http.createServer的函数将作为请求事件的侦听器添加到EventEmitter实例中。

传递给EventEmitter的侦听器返回的返回值将被忽略,证明。

因此,在这种情况下使用return语句的唯一好处是可以更早地返回,并在函数存在的情况下忽略它的其余部分,正如爆炸药丸所说的那样。

这个函数的返回值实际上不会去任何地方,尽管理论上它可以:

http.createServer = function (cb) {
    if (cb()) { /* do something */ }
};

据我所知,.createServer实际上并没有出于任何原因在内部执行此操作。在这种情况下,您想要使用return的原因是为了缩短功能执行,例如

var server = http.createServer(function (req, res) {
  if (req.method != 'POST')
    return res.end('send me a POST'n')
  res.end('POST sent'n');
})

当然,if/else无论如何都可能阻止函数的继续执行,但由于以下原因之一,您可以在回调函数中使用return