res.end() 和 res.send() 有什么区别?
What is the difference between res.end() and res.send()?
我是 Express.js
的初学者,我对这两个关键字感到困惑:res.end()
和 res.send()
。
它们相同还是不同?
res.send()
将发送 HTTP 响应。它的语法是,
res.send([body])
body参数可以是Buffer对象、String、对象或Array。例如:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
有关详细信息,请参阅 this。
res.end()
将结束响应过程。这个方法实际上来自Node核心,具体是http.ServerResponse
的response.end()
方法。用于在没有任何数据的情况下快速结束响应。例如:
res.end();
res.status(404).end();
阅读 this 了解更多信息。
我想稍微强调一下 res.end()
和 res.send()
在响应 header 方面的一些关键差异及其重要性。
1. res.send() 将检查输出的结构并设置 header
相应的信息。
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
app.get('/',(req,res)=>{
res.send({msg:'hello'});
});
使用 res.end() 时,您只能用文本回复,不会设置“Content-Type”
app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});
2。 res.send() 将在响应 header
中设置 "ETag" 属性
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
¿为什么这个标签很重要?
ETag HTTP 响应 header 是资源特定版本的标识符。它允许缓存更有效,并节省带宽,因为如果内容没有改变,网络服务器不需要发送完整的响应。
res.end()
不会设置此 header 属性
res.send()
实现 res.write
、res.setHeaders
和 res.end
:
- 它会检查您发送的数据并设置正确的响应 headers。
- 然后它使用
res.write
流式传输数据。
- 最后,它使用
res.end
设置请求结束。
在某些情况下,您需要手动执行此操作,例如,如果您想要流式传输文件或大型数据集。在这些情况下,您需要自己设置 headers 并使用 res.write
来保持流的流动。
res
是一个从 OutgoingMessage 扩展而来的 HttpResponse 对象。 res.send
调用OutgoingMessage 实现的res.end
发送HTTP 响应并关闭连接。我们看到代码here
res.send()
用于向客户端发送响应,其中 res.end()
用于结束您正在发送的响应。
res.send()
自动调用res.end()
所以你不用在res.send()
之后调用或提及
除了优秀的答案,我想在这里强调什么时候使用res.end()什么时候使用res.send() 这就是我最初登陆这里但没有找到解决方案的原因。
答案很简单
res.end()用于在不发送任何数据的情况下快速结束响应
这方面的一个例子是在服务器上启动一个进程
app.get(/start-service, (req, res) => {
// Some logic here
exec('./application'); // dummy code
res.end();
});
如果您想在响应中发送数据,则应改用 res.send()
app.get(/start-service, (req, res) => {
res.send('{"age":22}');
});
在这里你可以阅读更多内容
res.end()函数用于结束响应过程。
res.send()函数是res.write()
、res.setHeaders()
和res.end()
.
的组合
我是 Express.js
的初学者,我对这两个关键字感到困惑:res.end()
和 res.send()
。
它们相同还是不同?
res.send()
将发送 HTTP 响应。它的语法是,
res.send([body])
body参数可以是Buffer对象、String、对象或Array。例如:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
有关详细信息,请参阅 this。
res.end()
将结束响应过程。这个方法实际上来自Node核心,具体是http.ServerResponse
的response.end()
方法。用于在没有任何数据的情况下快速结束响应。例如:
res.end();
res.status(404).end();
阅读 this 了解更多信息。
我想稍微强调一下 res.end()
和 res.send()
在响应 header 方面的一些关键差异及其重要性。
1. res.send() 将检查输出的结构并设置 header 相应的信息。
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
app.get('/',(req,res)=>{
res.send({msg:'hello'});
});
使用 res.end() 时,您只能用文本回复,不会设置“Content-Type”
app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});
2。 res.send() 将在响应 header
中设置 "ETag" 属性 app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
¿为什么这个标签很重要?
ETag HTTP 响应 header 是资源特定版本的标识符。它允许缓存更有效,并节省带宽,因为如果内容没有改变,网络服务器不需要发送完整的响应。
res.end()
不会设置此 header 属性
res.send()
实现 res.write
、res.setHeaders
和 res.end
:
- 它会检查您发送的数据并设置正确的响应 headers。
- 然后它使用
res.write
流式传输数据。 - 最后,它使用
res.end
设置请求结束。
在某些情况下,您需要手动执行此操作,例如,如果您想要流式传输文件或大型数据集。在这些情况下,您需要自己设置 headers 并使用 res.write
来保持流的流动。
res
是一个从 OutgoingMessage 扩展而来的 HttpResponse 对象。 res.send
调用OutgoingMessage 实现的res.end
发送HTTP 响应并关闭连接。我们看到代码here
res.send()
用于向客户端发送响应,其中 res.end()
用于结束您正在发送的响应。
res.send()
自动调用res.end()
所以你不用在res.send()
除了优秀的答案,我想在这里强调什么时候使用res.end()什么时候使用res.send() 这就是我最初登陆这里但没有找到解决方案的原因。
答案很简单
res.end()用于在不发送任何数据的情况下快速结束响应
这方面的一个例子是在服务器上启动一个进程
app.get(/start-service, (req, res) => {
// Some logic here
exec('./application'); // dummy code
res.end();
});
如果您想在响应中发送数据,则应改用 res.send()
app.get(/start-service, (req, res) => {
res.send('{"age":22}');
});
在这里你可以阅读更多内容
res.end()函数用于结束响应过程。
res.send()函数是res.write()
、res.setHeaders()
和res.end()
.