如何在 Express 中使用 res 对象
介绍
在本文中,您将了解res
Express 中的 对象。 的简称response
,对象是和循环res
的一半,用于通过 HTTP 请求将数据从服务器发送到客户端。request
response
先决条件
-
了解 Node.js 很有帮助,但不是必需的。要了解有关 Node.js 的更多信息,请查看我们的“如何在 Node.js 中编码”系列。
-
HTTP 请求的一般知识。要了解有关 HTTP 请求的更多信息,请查看我们的教程“如何在 Express 中定义路由和 HTTP 请求方法”。
检查.status()
和.append()
方法
.send()
对象上的方法将res
作为参数传递的任何数据转发到客户端。该方法可以将字符串、数组和对象作为参数。
在您的index.js
文件中,GET
使用以下路由实现请求'/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()
对象上的方法将res
引导客户端进入不同的页面。如果用户在客户端输入登录凭据,该.redirect()
方法将有助于切换到他们的访问页面。
在您的index.js
文件中,在对象上设置一个.redirect()
方法res
:
res.redirect('/sharks/shark-facts')
这里,该.redirect()
方法会将客户端转发到路由'/sharks/shark-facts'
。
该.render()
方法接受 HTML 文件作为参数并将其发送到客户端。该方法还接受可选的第二个参数,即 locals 对象,该对象具有自定义属性,用于定义发送到客户端的文件。
在您的index.js
文件中,GET
使用以下路由实现请求'/shark-game'
:
[label index.js]
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();
一旦 HTTP 状态代码设置完毕,该.end()
方法将完成响应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 文件。调用.sendFile
方法将options
变量作为第二个参数,并将错误处理程序设置为第三个参数。这会将存储在目录中的文件发送public
到客户端。
您还可以使用对象.download()
上的方法简化文件处理res
。在您的index.js
文件中,实现GET
对路由的请求'/gallery/:fileName'
:
[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
要概述文件类型上的值,请使用对象.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
。
结论
该对象包含一些方法,用于促进从 Express 服务器到客户端的循环过程res
中的数据和文件传输。要获取有关该对象的全面信息,请访问Express.js 官方文档网站。response
res