关于所有请求对象的属性以及如何使用它们的便捷参考资料

97 阅读2分钟

关于所有请求对象的属性以及如何使用它们的便捷参考资料

请求参数

我提到了Request对象如何保存所有的HTTP请求信息。

这些是你可能会用到的主要属性。

属性描述
.app持有对Express应用程序对象的引用
.baseUrl应用程序响应的基本路径
.body包含在请求正文中提交的数据(在你访问它之前必须手动解析和填充)。
.cookies包含由请求发送的cookies(需要cookie-parser 中间件)
.hostnameHost HTTP头值中定义的主机名
.ip客户端IP
.method使用的HTTP方法
.params命名的路由参数
.pathURL路径
.protocol请求协议
.query一个包含请求中使用的所有查询字符串的对象。
.安全如果该请求是安全的(使用HTTPS),则为true。
.signedCookies包含请求所发送的签名的cookies(需要cookie-parser 中间件)
.xhr如果请求是一个XMLHttpRequest,则为true。

如何使用Express检索GET查询字符串的参数

查询字符串是在URL路径之后的部分,以一个问号开始?

例子。

可以使用& ,添加多个查询参数。

如何在Express中获得这些查询字符串值?

Express通过为我们填充Request.query 对象使之变得非常简单。

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  console.log(req.query)
})

app.listen(8080)

这个对象为每个查询参数填充了一个属性。

如果没有查询参数,它就是一个空对象。

这使得使用for...in循环对其进行迭代很容易。

for (const key in req.query) {
  console.log(key, req.query[key])
}

这将打印查询属性的键和值。

你也可以访问单个属性。

req.query.name //flavio
req.query.age //35

如何使用Express检索POST查询字符串的参数

POST查询参数是由HTTP客户端发送的,例如通过表单,或者在执行POST请求发送数据时。

你怎样才能访问这些数据呢?

如果数据是以JSON形式发送的,使用Content-Type: application/json ,你将使用express.json() 中间件。

const express = require('express')
const app = express()

app.use(express.json())

如果数据是使用Content-Type: application/x-www-form-urlencoded ,你将需要使用express.urlencoded() 中间件。

const express = require('express')
const app = express()

app.use(express.urlencoded({
  extended: true
}))

在这两种情况下,你都可以通过引用Request.body 来访问这些数据。

app.post('/form', (req, res) => {
  const name = req.body.name
})

注意:旧的Express版本需要使用body-parser 模块来处理POST数据。从Express 4.16(2017年9月发布)及以后的版本开始,这种情况就不再存在了。