如何在Express中使用req对象

来自菜鸟教程
跳转至:导航、​搜索

介绍

request 的缩写,req 对象是 requestresponse 周期的一半,用于检查来自客户端的调用,发出 HTTP 请求,并处理传入的数据,无论是字符串还是 JSON 对象。

在本文中,您将了解 Express 中的 req 对象。

先决条件

要阅读本文,您将需要:

  • 建议对 Node.js 有一个大致的了解,但不是必需的。 要了解有关 Node.js 的更多信息,请查看我们的 如何在 Node.js 中编码。
  • HTTP请求的常识。

管理客户端数据

Express 服务器在三个实例中通过 req 对象从客户端接收数据:req.paramsreq.queryreq.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/1GET 请求以 "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 服务器中的 POSTPUT 请求接收数据。

在您的 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 的各个部分。 这包括 protocolhostnamepathoriginalUrlsubdomains

在您的 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 方法,无论是 GETPOSTPUT 还是 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-TypeAuthorizationreq.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文档