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

新手上路,请多包涵

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

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

原文由 sudheeshcm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 944
2 个回答

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' });

有关更多信息,请参阅 内容。

res.end() 将结束响应过程。这个方法其实来自Node核心,具体来说就是—的 http.ServerResponse response.end() 方法。它用于在没有任何数据的情况下快速结束响应。例如:

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

阅读 内容以获取更多信息。

原文由 itzmebibin 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先, 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() 不会设置这个头属性

原文由 Jorge González 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题