介绍
在本文中,您将了解 Express 中的 res
对象。 response
的缩写,res
对象是 request 和 response
周期的一半,从服务器通过 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
请求采用带有 req
和 res
作为参数的回调参数。 您可以使用 GET
请求中的 res
对象将字符串 Hello World!
发送到客户端。
.send()
方法还根据数据的 Content-Type
和 Content-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 官方文档 网站。