如何在Express中使用res对象

来自菜鸟教程
跳转至:导航、​搜索

介绍

在本文中,您将了解 Express 中的 res 对象。 response 的缩写,res 对象是 requestresponse 周期的一半,从服务器通过 HTTP 向客户端发送数据要求。

先决条件

  • 了解 Node.js 会有所帮助,但不是必需的。 要了解有关 Node.js 的更多信息,请查看我们的 如何在 Node.js 中编码。
  • HTTP 请求的一般知识。 要了解有关 HTTP 请求的更多信息,请查看我们关于 如何在 Express 中定义路由和 HTTP 请求方法的教程。

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

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

在您的 index.js 文件中,使用路由 '/home' 实现 GET 请求:

index.js

app.get('/home', (req, res) => {
  res.send('Hello World!'))
});

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

.send() 方法还根据数据的 Content-TypeContent-Length 本地定义了自己的内置标头。

res 对象还可以使用 .status() 方法指定 HTTP 状态代码。 在您的 index.js 文件中,在 res 对象上集成 .status() 方法并传入 HTTP 状态代码作为参数:

index.js

res.status(404).send('Not Found');

res 对象上的 .status() 方法将设置 HTTP 状态码 404。 要将状态码发送到客户端,您可以使用 .send() 方法进行方法链。 状态码 404 告诉客户端没有找到请求的数据。

.sendStatus() 方法是适应 .status().send() 方法功能的简写语法:

index.js

res.sendStatus(404);

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

HTTP 状态码 总结了您的 Express 服务器的响应。 浏览器依靠 HTTP 状态码来通知客户端是否存在指定的数据或是否发生内部服务器错误。

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

index.js

res.append('Content-Type', 'application/javascript; charset=UTF-8');
res.append('Connection', 'keep-alive')
res.append('Set-Cookie', 'divehours=fornightly')
res.append('Content-Length', '5089990');

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

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

res 对象上的 redirect() 方法会将客户端定向到不同的页面。 如果用户在客户端输入他们的登录凭据,.redirect() 方法将有助于切换到他们的访问页面。

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

index.js

res.redirect('/sharks/shark-facts')

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

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

在您的 index.js 文件中,使用路由 '/shark-game' 实现 GET 请求:

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

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

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

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

index.js

res.sendStatus(404).end();

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

req 对象不仅有利于数据传输,也有利于文件传输。 让我们看看 req 对象包含的其他用于文件管理的方法。

使用 res 对象处理文件

要将 HTML、CSS 和 JavaScript 文件发送到客户端,请在 res 对象上使用 .sendFile() 方法。 在您的 index.js 文件中,将 GET 请求设置为路由 '/gallery/:fileName'

// GET https://sharks.com/gallery/shark-image.jpg

app.get('/gallery/:fileName', function (req, res, next) {

  var options = {
    root: path.join(__dirname, 'public')
  };

  res.sendFile(req.params.fileName, options, function (err) {
    if (err) next(err);
    else console.log('Sent:', fileName);
  });
});

GET 请求中,变量 options 将对象和 public 目录作为对 path.join() 的调用中的值,以用作绝对路径。 public目录中的内容包括HTML、CSS和JavaScript文件。 call .sendFile 方法将 options 变量作为第二个参数,并将错误处理程序设置为第三个参数。 这会将存储在 public 目录中的文件发送到客户端。

您还可以使用 res 对象上的 .download() 方法来促进文件处理。 在您的 index.js 文件中,对路由 '/gallery/:fileName' 执行 GET 请求:

[label index.js] 
// GET https://sharkss.com/gallery/shark-image.jpg

app.get('/gallery/:fileName', function(req, res){
  const file = `${__dirname}/public/${req.params.fileName}`;
  res.download(file);
});

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

要概述文件类型上 Content-Header 的值,请对 res 对象使用 .type() 方法。 在 index.js 文件中,在 res 对象上设置 .type() 方法,并将文件类型作为参数传递:

index.js

res.type('png')              // => 'image/png'
res.type('html')             // => 'text/html'
res.type('application/json') // =>'application/json'

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

结论

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