我是Express.js的初学者,我被这两个关键字弄糊涂了:res.end()和res.send()。它们是相同的还是不同的?
Express.js
res.end()
res.send()
lmvvr0a81#
首先,res.send()和res.end()不相同。我想更多地强调一下res.end()和res.send()在响应头方面的一些关键区别,以及它们为什么重要。
1.res.send()将检查输出的结构并相应地设置头信息。
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()会在响应头中设置ETag属性
ETag HTTP响应标头是资源的特定版本的标识符。它允许缓存更有效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。
9o685dep2#
首先,res.send()和res.end()不同。res.send()将发送HTTP响应。它的语法是
res.send([body])
body参数可以是Buffer对象、String、object或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' });
更多信息请参见此。res.end()将结束响应过程。这个方法实际上来自Node核心,具体来说就是http.ServerResponse的response.end()方法。它用于在没有任何数据的情况下快速结束响应。例如:
http.ServerResponse
response.end()
res.end(); res.status(404).end();
请阅读本文以获取更多信息。
bvjveswy3#
res.send()实现了res.write、res.setHeaders和res.end:1.它检查您发送的数据并设置正确的响应头。1.然后,它使用res.write流式传输数据。1.最后,它使用res.end来设置请求的结束。在某些情况下,您需要手动执行此操作,例如,如果您想要流式传输文件或大型数据集。在这些情况下,您需要自己设置头文件,并使用res.write来保持流的流动。
res.write
res.setHeaders
res.end
sxissh064#
除了优秀的答案,我想在这里强调,什么时候使用 res.end() 和什么时候使用 res.send() 这就是为什么我最初登陆这里,我没有找到解决方案。答案很简单。
例如,在服务器上启动一个进程:
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}'); });
在这里您可以阅读更多:
x6yk4ghg5#
res.send()用于将响应发送到客户端,res.end()用于结束正在发送的响应。res.send()自动调用res.end(),因此您不必在res.send()之后调用或提及它
4bbkushb6#
res是从OutgoingMessage扩展的HttpResponse对象。res.send调用OutgoingMessage实现的res.end发送HTTP响应并关闭连接。我们在这里看到代码
res
res.send
6条答案
按热度按时间lmvvr0a81#
首先,
res.send()
和res.end()
不相同。我想更多地强调一下
res.end()
和res.send()
在响应头方面的一些关键区别,以及它们为什么重要。1.res.send()将检查输出的结构并相应地设置头信息。
在res.end()中,你只能用文本来响应,它不会设置“Content-Type”
2.res.send()会在响应头中设置ETag属性
ETag HTTP响应标头是资源的特定版本的标识符。它允许缓存更有效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。
res.end()
不会设置此头属性 *9o685dep2#
首先,
res.send()
和res.end()
不同。res.send()
将发送HTTP响应。它的语法是body参数可以是Buffer对象、String、object或Array。例如:
更多信息请参见此。
res.end()
将结束响应过程。这个方法实际上来自Node核心,具体来说就是http.ServerResponse
的response.end()
方法。它用于在没有任何数据的情况下快速结束响应。例如:请阅读本文以获取更多信息。
bvjveswy3#
res.send()
实现了res.write
、res.setHeaders
和res.end
:1.它检查您发送的数据并设置正确的响应头。
1.然后,它使用
res.write
流式传输数据。1.最后,它使用
res.end
来设置请求的结束。在某些情况下,您需要手动执行此操作,例如,如果您想要流式传输文件或大型数据集。在这些情况下,您需要自己设置头文件,并使用
res.write
来保持流的流动。sxissh064#
除了优秀的答案,我想在这里强调,什么时候使用 res.end() 和什么时候使用 res.send() 这就是为什么我最初登陆这里,我没有找到解决方案。
答案很简单。
例如,在服务器上启动一个进程:
如果你想在响应中发送数据,那么你应该使用 res.send():
在这里您可以阅读更多:
x6yk4ghg5#
res.send()
用于将响应发送到客户端,res.end()
用于结束正在发送的响应。res.send()
自动调用res.end()
,因此您不必在res.send()
之后调用或提及它4bbkushb6#
res
是从OutgoingMessage扩展的HttpResponse对象。res.send
调用OutgoingMessage实现的res.end
发送HTTP响应并关闭连接。我们在这里看到代码