如何在Express中使用req对象
介绍
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文档。