我有几个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();
});
这两种情况都有效,但是当我运行很多请求时,我担心泄漏或耗尽文件描述符或类似的东西。哪一个“更正确”?
答案 0 :(得分:108)
你的问题的答案是否定的。如果拨打res.end()
,则无需致电res.send()
。 res.send()
为您致电res.end()
。
取自/lib/response.js,这是res.send()
函数的结尾:
//. . .
// respond
this.end(head ? null : body);
return this;
}
答案 1 :(得分:7)
您必须调用end()函数的一个示例是将缓冲区作为要下载的文件发送。
res.write(buffer);
res.end();
答案 2 :(得分:3)
res.end([data] [, encoding])
结束响应过程。此方法实际上来自节点核心,特别是response.end() method of http.ServerResponse.
用于在没有任何数据的情况下快速结束响应。
如果您需要回复数据,请使用诸如此类的方法 的
res.send() and res.json().
强>