介绍
对于短request
的req
对象的一半request
,并response
循环检查从客户端调用,使HTTP请求,并处理传入的数据是否在字符串或JSON对象。
在本文中,您将了解req
Express 中的对象。
先决条件
要阅读本文,您需要:
- 建议对 Node.js 有一个大致的了解,但不是必需的。要了解有关 Node.js 的更多信息,请查看我们的如何在 Node.js 中编码系列。
- HTTP 请求的一般知识。
管理客户端数据
Express服务器通过接收来自客户端的数据req
的:对象在三个实例req.params
,req.query
和req.body
对象。
该req.params
对象根据 URL 中指定的参数捕获数据。在您的index.js
文件中,GET
使用以下参数实现请求'/:userid'
:
// GET https://example.com/user/1
app.get('/:userid', (req, res) => {
console.log(req.params.userid) // "1"
})
该req.params
对象告诉 Express 通过参数 输出用户 id 的结果'/:userid'
。在这里,带有指定参数的GET
请求以https://example.com/user/1
id 登录到控制台"1"
。
要访问 URL 查询字符串,请将req.query
对象应用于搜索、过滤和排序数据。在您的index.js
文件中,包含GET
对路由的请求'/search'
:
// GET https://example.com/search?keyword=great-white
app.get('/search', (req, res) => {
console.log(req.query.keyword) // "great-white"
})
req.query
在查询条件中使用对象匹配从客户端加载的数据。在这种情况下,对路由的GET
请求'/search'
通知 Express 将搜索查询中的关键字匹配到https://example.com
。将.keyword
属性附加到req.query
对象的结果会记录到控制台中"great-white"
。
该req.body
对象允许您从客户端访问字符串或 JSON 对象中的数据。您通常使用该req.body
对象通过Express 服务器接收数据POST
和PUT
请求。
在您的index.js
文件中,设置POST
对路由的请求'/login'
:
// POST https://example.com/login
//
// {
// "email": "[email protected]",
// "password": "helloworld"
// }
app.post('/login', (req, res) => {
console.log(req.body.email) // "[email protected]"
console.log(req.body.password) // "helloworld"
})
当用户在客户端输入他们的电子邮件和密码时,该req.body
对象会存储该信息并将其发送到您的 Express 服务器。将req.body
对象记录到控制台会生成用户的电子邮件和密码。
既然您已经研究了实现req
对象的方法,让我们看看其他方法来集成到您的 Express 服务器中。
检查具有req
属性的 URL
req
对象上的属性还可以根据解剖结构返回 URL 的部分。这包括protocol
,hostname
,path
,originalUrl
,和subdomains
。
在您的index.js
文件中,设置GET
对'/creatures'
路由的请求:
// https://ocean.example.com/creatures?filter=sharks
app.get('/creatures', (req, res) => {
console.log(req.protocol) // "https"
console.log(req.hostname) // "example.com"
console.log(req.path) // "/creatures"
console.log(req.originalUrl) // "/creatures?filter=sharks"
console.log(req.subdomains) // "['ocean']"
})
您可以使用内置的属性,如访问URL的各个部分.protocol
和.hostname
。req
使用每个属性记录对象会导致 URL 的解剖结构。
分析其他req
属性
该res
对象包含的属性可以最大化您对 HTTP 请求的调用。
要访问HTTP方法,无论是GET
,POST
,PUT
,或者DELETE
,利用.method
属性的req
对象。在您的index.js
文件中,实现DELETE
对匿名端点的请求:
app.delete('/', (req, res) => {
console.log(req.method) // "DELETE"
})
该.method
属性返回当前的 HTTP 请求方法。在这种情况下,控制台会记录一个DELETE
方法。
对于发送到您的服务器的标头,请将方法附加.header()
到您的req
对象。设置对文件中POST
路由的请求:'/login'
index.js
app.post('/login', (req, res) => {
req.header('Content-Type') // "application/json"
req.header('user-agent') // "Mozilla/5.0 (Macintosh Intel Mac OS X 10_8_5) AppleWebKi..."
req.header('Authorization') // "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
})
该req.header()
方法将返回标头类型,例如Content-Type
and Authorization
。for 的参数req.header()
不区分大小写,因此您可以使用req.header('Content-Type')
和req.header('content-type')
互换。
如果您cookie-parser
在 Express 服务器中添加了依赖项,则该req.cookies
属性将存储来自解析器的值。在您的index.js
文件中,设置一个实例req.cookies
并应用该sessionDate
属性:
// Cookie sessionDate=2019-05-28T01:49:11.968Z
req.cookies.sessionDate // "2019-05-28T01:49:11.968Z"
请注意从req
对象调用时从 cookie 的会话日期返回的结果。
结论
Express 提供了内置属性来利用req
对象作为request
循环的一部分来处理来自客户端的 HTTP 请求和数据。如果您想查看官方文档,req
请访问官方 Express.js 文档。