必须使用node.js快速调用res.end()吗?


89

我有几个Express应用程序,我发现在某些模块中,res.end()该请求是在请求处理程序的末尾(res.send或之后res.json)调用的,而在其他模块中则没有调用。

例如:

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

要么:

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

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


2
我以为res.send()触发了res.end()-可能是错误的。
tymeJV 2013年


谢谢@ Trevor-Senior,我一直在寻找相同的文件,却没有看到...
greuze 2013年

@greuze我之前已经看过它,所以我有了一个很好的开端:)。我继续前进,并将评论移至其他人的结构化答案中。
JayQuerie.com 2013年

你好 那么res.status(<any>)。json(); 我还有另一个问题。如果我拒绝该呼叫,应该发回哪个错误代码?喜欢用户超出了他的限制?
2015年

Answers:


120

您的问题的答案是否定的。res.end()如果您致电,则不必致电res.send()res.send()呼唤res.end()你。

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

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

4
也许我的记忆终于好起来了:)
tymeJV 2013年


5

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

结束响应过程。此方法实际上来自Node核心,特别是response.end() method of http.ServerResponse. Use,用于快速结束没有任何数据的响应。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.