【问题标题】:Must res.end() be called in express with node.js?必须使用 node.js 快速调用 res.end() 吗?
【发布时间】:2013-12-19 17:53:21
【问题描述】:

我有几个Express 应用程序,我看到在某些模块中,res.end() 在请求处理程序的末尾被调用(在res.sendres.json 之后),而在其他模块中,它不是调用。

例如:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

或:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

这两种情况都有效,但是当我运行许多请求时,我担心泄漏或文件描述符用完或类似的东西。哪个“更正确”?

【问题讨论】:

  • 我认为res.send() 触发了res.end() -- 可能是错的。
  • @tymeJV 你是对的,确实如此:github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
  • 感谢@Trevor-Senior,我正在查看同一个文件,但没有看到...
  • @greuze 我以前查过它,所以我有一个先机:)。我继续将评论移到其他人的更有条理的答案中。
  • 嗨。那么 res.status().json();我还有另一个问题。如果我拒绝该呼叫,我应该发回哪个错误代码?喜欢用户超出了他的限制?

标签: node.js express


【解决方案1】:

您的问题的答案是否定的。如果您拨打res.send(),则不必拨打res.end()res.send() 为您拨打 res.end()

取自/lib/response.js,这里是res.send()函数的结尾:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

【讨论】:

  • 也许我的记忆终于变好了:)
【解决方案2】:

您必须调用 end() 函数的一个示例是当您将缓冲区作为文件发送以进行下载时。

res.write(buffer);
res.end();

【讨论】:

    【解决方案3】:

    res.end([data] [, encoding])

    结束响应过程。这个方法其实来自Node core,具体来说是response.end() method of http.ServerResponse. 用于在没有任何数据的情况下快速结束响应。

    如果您需要使用数据进行响应,请改用诸如 res.send() and res.json().

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      相关资源
      最近更新 更多