【发布时间】:2015-06-15 19:26:27
【问题描述】:
我是Express.js 的初学者,我对这两个关键字感到困惑:res.end() 和res.send()。
它们是相同的还是不同的?
【问题讨论】:
-
我认为
res.end被普通节点使用,而res.send被快速框架使用 -
response.send包括一个response.end调用。
我是Express.js 的初学者,我对这两个关键字感到困惑:res.end() 和res.send()。
它们是相同的还是不同的?
【问题讨论】:
res.end 被普通节点使用,而res.send 被快速框架使用
response.send 包括一个response.end 调用。
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了解更多信息。
【讨论】:
express,但从标题来看 - 一个发送一些东西,一个结束一些东西......'这是正确的。
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”属性
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
¿为什么这个标签很重要?
ETag HTTP 响应标头是资源特定版本的标识符。它使缓存更有效,并节省带宽,因为如果内容没有更改,Web 服务器不需要发送完整的响应。
res.end() 不会设置此标头属性
【讨论】:
.end()视为一个低级函数并在您的Express应用程序中使用.send()?
res.send() 实现 res.write、res.setHeaders 和 res.end:
res.write 流式传输数据。res.end 来设置请求的结束。在某些情况下,您需要手动执行此操作,例如,如果您想要流式传输文件或大型数据集。在这些情况下,您需要自己设置标头并使用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()的组合。
【讨论】: