res.end()和res.send()有什么区别?

我是Express.js的初学者,我对这两个关键字感到困惑:res.end()res.send()

它们是相同的还是不同的?

180972 次浏览

首先,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.ServerResponseresponse.end()方法。它用于在没有任何数据的情况下快速结束响应。例如:

res.end();
res.status(404).end();

更多信息请阅读

首先,res.send()res.end()是相同的

我想稍微强调一下res.end()和amp;res.send()关于响应头和为什么他们是重要的。

< p > < em > <强> 1。Res.send()将检查输出和设置头的结构 相应信息。< /强> < / em > < / p >
    app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});

enter image description here


     app.get('/',(req,res)=>{
res.send({msg:'hello'});
});

enter image description here

在res.end()中,你只能用文本进行响应,它不会设置"内容类型"

      app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});

enter image description here

<强> 2。res.send()将设置“;ETag"属性

      app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});

enter image description here

< p > 为什么这个标签很重要? < br > ETag HTTP响应标头是资源特定版本的标识符。它允许缓存更有效,并节省带宽,因为web服务器不需要发送一个完整的响应,如果内容没有改变

res.end()不会设置这个头属性

res.send()实现了res.writeres.setHeadersres.end:

  1. 它检查您发送的数据并设置正确的响应头。
  2. 然后它用res.write传输数据。
  3. 最后,它使用res.end来设置请求的结束。

在某些情况下,您可能需要手动执行此操作,例如,如果您想传输文件或大型数据集。在这些情况下,你需要自己设置头文件,并使用res.write来保持流的流动。

res是一个HttpResponse对象,它扩展自OutgoingMessage。res.send调用由OutgoingMessage实现的res.end来发送HTTP响应并关闭连接。我们看到代码在这里

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()的组合。