我有几个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();
});
这两种情况都有效,但当我运行许多请求时,我担心会泄漏或耗尽文件描述符或类似的东西。哪一个“更正确”?
您的问题的答案是否定的。如果您调用res. send()
,则不必调用res.end()
。res.send()
为您调用res.end()
。
从 /lib/response.js,这是res. send()
函数的结尾:
//. . .
// respond
this.end(head ? null : body);
return this;
}
您必须调用end()函数的一个示例是当您将缓冲区作为文件发送以下载时。
res.write(buffer);
res.end();
res. end([data][,编码])
结束响应过程。这个方法实际上来自Node core,特别是http. ServerResponse的response.end()方法。
用于在没有任何数据的情况下快速结束响应。
如果您需要使用数据响应,请改用res. send()和res.json()等方法。