如何在 Express 中使用 req 对象
介绍
的缩写request
,对象是and循环req
的一半,用于检查来自客户端的调用、发出 HTTP 请求并处理传入数据(无论是字符串还是 JSON 对象)。request
response
在本文中,您将了解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 对象中的数据。您通常使用该对象通过Express 服务器req.body
接收数据POST
并发出请求。PUT
在您的index.js
文件中,设置POST
对路线的请求'/login'
:
// POST https://example.com/login
//
// {
// "email": "user@example.com",
// "password": "helloworld"
// }
app.post('/login', (req, res) => {
console.log(req.body.email) // "user@example.com"
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']"
})
您可以使用内置属性(例如.protocol
和 )访问 URL 的各个部分.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
和Authorization
。 的参数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"
注意从对象调用时从 cookie 的会话日期返回的结果req
。
结论
Express 提供内置属性,以利用对象req
作为循环的一部分request
来处理来自客户端的 HTTP 请求和数据。如果您想查看官方文档,req
请访问Express.js 官方文档。