我是一个初学者,正在学习Express.js
,我对这两个关键词感到困惑:res.end()
和res.send()
。
它们是相同的还是不同的?
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>');
});
为什么这个标签很重要?res.end()
不会设置这个头属性。.end()
视为低级函数,并在Express应用程序中使用.send()
。 - Eric Burel.send
在内部调用了 .end
。 - Константин Ван使用res.end()只能响应文本
。res.send()
内部使用res.setHeader("content-type", myContentType)
来设置内容类型,然后使用res.end(data...)
发送数据。res.end()
可以发送各种类型的数据,不仅仅是文本。 - Welcor首先,res.send()
和 res.end()
是不同的。
res.send()
会发送HTTP响应。它的语法是,
res.send([body])
body参数可以是一个Buffer对象、一个字符串、一个对象或一个数组。例如:
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();
阅读此文以获得更多信息。
express
,但从标题认为 - 一个发送东西,另一个结束东西....没错。 - Darren Bartrup-Cookres.send()
而不传入任何内容,那么会像使用 res.end()
一样吗? - CMCDragonkaires.send()
实现了 res.write
, res.setHeaders
和 res.end
的功能:
res.write
流式传输数据。res.end
来结束请求。在某些情况下,您可能需要手动执行此操作,例如,如果要流式传输文件或大型数据集,则需要自己设置标头并使用 res.write
保持流传输。
除了出色的答案外,我想在这里强调一下,何时使用res.end()和何时使用res.send(),这就是我最初来到这里并且没有找到解决方案的原因。
答案非常简单。
res.end()用于快速结束响应而不发送任何数据。
一个示例是在服务器上启动一个进程:
app.get('/start-service', (req, res) => {
// Some logic here
exec('./application'); // dummy code
res.end();
});
app.get('/start-service', (req, res) => {
res.send('{"age":22}');
});
res.send()
用于向客户端发送响应,而res.end()
用于结束您发送的响应。
res.send()
自动调用res.end()
,因此在res.send()
之后不需要调用或提及它。
res
是一个HttpResponse对象,它继承自OutgoingMessage。res.send
调用res.end
并由OutgoingMessage实现来发送HTTP响应和关闭连接。我们在这里看到代码。
res.end
,而在 Express 框架中使用res.send
。 - Muhammad Umerresponse.send
包含一个response.end
调用。 - Константин Ван