如何在 Express 中使用 res 对象

介绍

在本文中,您将了解Express中的res对象,简称响应,res对象是通过HTTP请求从服务器发送数据到客户端的请求周期的一半。

前提条件

  • 对 Node.js 的理解是有帮助的,但不需要。 要了解更多关于 Node.js 的信息,请参阅我们的 如何在 Node.js 中编码系列
  • 对 HTTP 请求的通用知识。

检查.status().append()的方法

res对象上的.send()方法将作为参数传递给客户端的任何数据转发,该方法可以将字符串、数组和对象作为参数。

index.js文件中,执行GET请求,并使用路线’/home执行:

1[label index.js]
2app.get('/home', (req, res) => {
3  res.send('Hello World!'))
4});

请注意,在GET请求中,将调用参数reqres作为参数,您可以使用GET请求中的res对象将字符串Hello World!发送到客户端。

.send() 方法还会根据数据的内容类型内容长度定义其内置标题。

在您的 index.js 文件中,将.status() 方法整合到 res 对象上,并作为参数输入 HTTP 状态代码:

1[label index.js]
2res.status(404).send('Not Found');

「res」对象上的 .status() 方法将设置一个 HTTP 状态代码为 404. 要将状态代码发送到客户端,您可以使用 .send() 方法进行方法链。

.sendStatus() 方法是一个缩写语法,用于调整 .status().send() 方法的功能:

1[label index.js]
2res.sendStatus(404);

在这里,.sendStatus() 方法将设置 HTTP 状态代码 404,并在一次呼叫中将其发送到客户端。

浏览器依靠 HTTP 状态代码来告知客户端是否存在指定的数据或是否发生内部服务器错误。

要在您的服务器响应中定义一个标题,请应用 .append() 方法. 在您的 index.js 文件中,将标题作为第一个参数,并将值作为您调用 .append() 的第二个参数:

1[label index.js]
2res.append('Content-Type', 'application/javascript; charset=UTF-8');
3res.append('Connection', 'keep-alive')
4res.append('Set-Cookie', 'divehours=fornightly')
5res.append('Content-Length', '5089990');

在一个代码行中,.append() 方法在您的服务器响应中接受标准和非标准标题。

分析.redirect(),.render().end()方法

res对象上的redirect()方法会将客户端转到另一个页面,如果用户在客户端输入其登录凭证,则.redirect()方法将促进转到他们的访问页面。

index.js文件中,将一个.redirect()方法设置在res对象上:

1[label index.js]
2res.redirect('/sharks/shark-facts')

在这里,.redirect() 方法将客户端转发到路线 `'/sharks/shark-facts'。

.render() 方法接受一个 HTML 文件作为一个参数,并将其发送到客户端,该方法还接受一个可选的第二个参数,一个本地对象,具有自定义属性来定义发送到客户端的文件。

index.js文件中,执行GET请求,并使用路线’/shark-game执行:

1[label index.js] 
2app.get('/shark-game', (req, res) => {
3  res.render('shark.html', {status: 'good'});
4});

res对象上使用.render()方法将将HTML文件shark.html和具有status属性的本地对象发送到客户端。

.end() 方法将终止响应周期,建议使用.end() 方法作为您对客户端响应的最后一次呼叫。

index.js文件中,设置一个与.end()链接的.sentStatus()方法:

1[label index.js]
2res.sendStatus(404).end();

.end() 方法将完成响应,一旦 HTTP 状态代码 404 设置并发送到客户端。

req对象不仅可以促进数据传输,还可以通过文件进行传输,让我们看看req对象包含的其他文件管理方法。

处理res对象的文件

要将HTML、CSS 和 JavaScript 文件发送到客户端,请在res对象上使用.sendFile()方法。

 1// GET https://sharks.com/gallery/shark-image.jpg
 2
 3app.get('/gallery/:fileName', function (req, res, next) {
 4
 5  var options = {
 6    root: path.join(__dirname, 'public')
 7  };
 8
 9  res.sendFile(req.params.fileName, options, function (err) {
10    if (err) next(err);
11    else console.log('Sent:', fileName);
12  });
13});

GET请求中,变量选项将一个对象和公共目录作为呼叫path.join()中的值作为绝对路径。在公共目录中的内容包括HTML、CSS和JavaScript文件。呼叫.sendFile方法将公共目录作为第二个参数,并将错误处理器设置为第三个。

您还可以通过.download()方法在res对象上进行文件处理,在您的index.js文件中,将GET请求执行到路径/gallery/:fileName中:

1[label index.js] 
2// GET https://sharkss.com/gallery/shark-image.jpg
3
4app.get('/gallery/:fileName', function(req, res){
5  const file = `${__dirname}/public/${req.params.fileName}`;
6  res.download(file);
7});

.download() 方法发送并提示客户端下载文件,并在一次调用中为该文件类型设置适当的标题。

要在一个文件类型上概述一个内容标题的值,请在res对象上使用.type()方法.在你的index.js文件中,在res对象上设置一个.type()方法,并将一个文件类型作为一个参数:

1[label index.js]
2res.type('png')              // => 'image/png'
3res.type('html')             // => 'text/html'
4res.type('application/json') // =>'application/json'

.type() 方法将输出文件类型及其相关值在 Content-Header

结论

res对象包含方法来促进数据和文件传输,作为您的响应循环的一部分,从您的 Express 服务器到客户端. 有关res对象的全面信息,请访问 Express.js 官方文档网站。

Published At
Categories with 技术
Tagged with
comments powered by Disqus