介绍
在本文中,您将了解res
Express 中的对象。的简称response
,res
对象是通过HTTP请求从服务器端向客户端发送数据的一半request
和response
周期。
先决条件
-
了解 Node.js 会有所帮助,但不是必需的。要了解有关 Node.js 的更多信息,请查看我们的如何在 Node.js 中编码系列。
-
HTTP 请求的一般知识。要了解有关 HTTP 请求的更多信息,请查看我们关于如何在 Express 中定义路由和 HTTP 请求方法的教程。
检查.status()
和.append()
方法
所述.send()
的方法上res
对象转发任何数据作为参数传递给客户端通过。该方法可以将字符串、数组和对象作为参数。
在您的index.js
文件中,GET
使用 route实现请求'/home'
:
app.get('/home', (req, res) => {
res.send('Hello World!'))
});
请注意,该GET
请求采用带有req
和的回调参数res
作为参数。您可以使用请求中的res
对象GET
将字符串发送Hello World!
到客户端。
该.send()
方法还根据数据的Content-Type
和本地定义了自己的内置标头Content-Length
。
该res
对象还可以使用该.status()
方法指定 HTTP 状态代码。在您的index.js
文件中,.status()
在res
对象上集成方法并传入 HTTP 状态代码作为参数:
res.status(404).send('Not Found');
所述.status()
的方法上res
的对象将设置的HTTP状态代码404
。要将状态代码发送到客户端,您可以使用方法链.send()
。状态码404
告诉客户端没有找到请求的数据。
该.sendStatus()
方法是一种速记语法,用于适应.status()
和.send()
方法的功能:
res.sendStatus(404);
在这里,该.sendStatus()
方法将设置 HTTP 状态码404
并在一次调用中将其发送到客户端。
HTTP 状态代码总结了 Express 服务器的响应。浏览器依靠 HTTP 状态代码来通知客户端指定的数据是否存在或是否发生内部服务器错误。
要在服务器响应中定义标头,请应用该.append()
方法。在您的index.js
文件中,将标头作为第一个参数传入,并将值作为第二个参数传入.append()
:
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()
方法
该redirect()
on方法res
的对象将客户端定向到不同的页面。如果用户在客户端输入他们的登录凭据,该.redirect()
方法将有助于切换到他们的访问页面。
在您的index.js
文件中,.redirect()
在res
对象上设置一个方法:
res.redirect('/sharks/shark-facts')
在这里,该.redirect()
方法会将客户端转发到 route '/sharks/shark-facts'
。
该.render()
方法接受一个 HTML 文件作为参数并将其发送到客户端。该方法还接受一个可选的第二个参数,一个 locals 对象,带有自定义属性来定义发送到客户端的文件。
在您的index.js
文件中,GET
使用 route实现请求'/shark-game'
:
app.get('/shark-game', (req, res) => {
res.render('shark.html', {status: 'good'});
});
.render()
在res
对象上使用该方法会将 HTML 文件shark.html
和带有status
属性的本地对象发送到客户端。
该.end()
方法将终止响应周期。建议将该.end()
方法用作对客户端的响应中的最后一个调用。
在您的index.js
文件中,设置一个.sentStatus()
链接方法.end()
:
res.sendStatus(404).end();
.end()
一旦 HTTP 状态代码404
设置并将其发送到客户端,该方法将完成响应。
该req
对象不仅便于数据传输,还便于文件传输。让我们看看req
对象包含的用于文件管理的其他方法。
使用res
对象处理文件
要将 HTML、CSS 和 JavaScript 文件发送到客户端,请使用对象.sendFile()
上的方法res
。在您的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
目录中的文件发送到客户端。
您还可以使用对象.download()
上的方法促进文件处理res
。在您的index.js
文件中,实现GET
对路由的请求'/gallery/:fileName'
:
// 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
文件类型上 a的值,请使用对象.type()
上的方法res
。在您的index.js
文件中,.type()
在res
对象上设置一个方法并将文件类型作为参数传递:
res.type('png') // => 'image/png'
res.type('html') // => 'text/html'
res.type('application/json') // =>'application/json'
该.type()
方法将输出文件类型及其相关值的Content-Header
.
结论
该res
对象包含促进数据和文件传输的方法,作为response
从 Express 服务器到客户端的循环的一部分。要获取有关res
对象的全面信息,请访问Express.js 官方文档网站。