介绍
request
的缩写,req
对象是 request 和 response 周期的一半,用于检查来自客户端的调用,发出 HTTP 请求,并处理传入的数据,无论是字符串还是 JSON 对象。
在本文中,您将了解 Express 中的 req
对象。
先决条件
要阅读本文,您将需要:
- 建议对 Node.js 有一个大致的了解,但不是必需的。 要了解有关 Node.js 的更多信息,请查看我们的 如何在 Node.js 中编码。
- HTTP请求的常识。
管理客户端数据
Express 服务器在三个实例中通过 req
对象从客户端接收数据:req.params
、req.query
和 req.body
对象。
req.params
对象根据 URL 中指定的参数捕获数据。 在您的 index.js
文件中,使用 '/:userid'
参数实现 GET
请求:
index.js
// GET https://example.com/user/1 app.get('/:userid', (req, res) => { console.log(req.params.userid) // "1" })
req.params
对象告诉 Express 通过参数 '/:userid'
输出用户 id 的结果。 这里,使用指定参数对 https://example.com/user/1
的 GET
请求以 "1"
的 id 登录到控制台。
要访问 URL 查询字符串,请应用 req.query
对象来搜索、过滤和排序数据。 在您的 index.js
文件中,包含对 '/search'
路由的 GET
请求:
index.js
// GET https://example.com/search?keyword=great-white app.get('/search', (req, res) => { console.log(req.query.keyword) // "great-white" })
利用 req.query
对象在查询条件中匹配从客户端加载的数据。 在这种情况下,对 '/search'
路由的 GET
请求通知 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": "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'
路由:
index.js
// 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
和 .hostname
等内置属性访问 URL 的各个部分。 使用每个属性记录 req
对象会导致 URL 的剖析。
分析其他 req
属性
res
对象包含最大化对 HTTP 请求的调用的属性。
要访问 HTTP 方法,无论是 GET
、POST
、PUT
还是 DELETE
,请使用 .method
属性到 [X123X ] 对象。 在您的 index.js
文件中,对匿名端点执行 DELETE
请求:
index.js
app.delete('/', (req, res) => { console.log(req.method) // "DELETE" })
.method
属性返回当前的 HTTP 请求方法。 在这种情况下,控制台会记录一个 DELETE
方法。
对于发送到您的服务器的标头,将方法 .header()
附加到您的 req
对象。 在你的 index.js
文件中设置一个 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')
。
如果您在 Express 服务器中添加了 cookie-parser 作为依赖项,则 req.cookies
属性将存储来自解析器的值。 在您的 index.js
文件中,设置 req.cookies
的实例并应用 sessionDate
属性:
index.js
// 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文档。