HTTP请求和响应是互联网现代通信标准的关键部分。虽然后端框架(例如Express Appressive删除这些技术细节的大量技术细节),但它们通常提供许多属性和方法,使开发人员可以以有趣的方式与它们互动。让我们深入了解其中的一些。
请求对象
1.冷0
req.params
属性用于访问路由中从URL捕获的参数。这些参数通常在路由路径中定义为占位符,对于创建动态路由很有用。例如,如果您将路由定义为/users/:id
,则可以使用路由处理程序中的req.params.id
访问id
参数。
const express = require('express')
const app = express()
app.get('/users/:id', (req, res) => {
const userId = req.params.id
// Use the userId in your route logic
})
// Example URL: /users/123
// req.params = {id: "123"}
...
2. req.query
req.query
属性提供了对URL中发送的查询参数的访问。这些参数通常在问号后附加到URL(?
),对于将可选数据传递给服务器很有用。
...
app.get('/search', (req, res) => {
const query = req.query.q
// Use the query in your route logic
})
// Example URL: /search?breakfast=pie&dinner=cake
// req.query = {breakfast: "pie", dinner: "cake"}
...
3. req.body
要处理来自HTML表单或JSON有效载荷的传入数据,Express.js使用req.body
属性。默认情况下,req.body
将不确定,除非您配置了身体解析器,例如express.json()或express.urlencoded()。
让我们在我们网站上的投诉提交表上解析和处理传入的表格数据:
...
// For parsing application/json
app.use(express.json())
// For parsing application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }))
// Present the user with the form
app.get('/submitComplaint', (req, res) => {
res.render('complaintForm')
})
// Handle post requests from the form
app.post('/submitComplaint', (req, res) => {
// Destructure properties from the req.body object
const {
email,
phoneNumber,
homeAddress,
complaint
} = req.body
// Record the user's IP address for future plans
const ip = req.ip
// Legitimate business logic goes here. . .
})
...
4.冷11
req.headers
属性提供了对客户端发送的HTTP标头的访问权限。例如,您可以通过访问用户代理信息(req.headers['user-agent']
)访问用户浏览器的信息,以便您可以 target 警告或拒绝使用过时且脆弱的浏览器版本的用户。<
...
app.get('/user-agent', (req, res) => {
const userAgent = req.headers['user-agent'];
// Use the userAgent in your route logic
})
...
响应对象
1. res.send()
res.send()
用于向客户发送响应。该方法采用身体参数,更常见接受字符串,对象或数组。
...
app.get('/:dataType', (req, res) => {
let {dataType} = req.params
dataType = dataType.toLowerCase()
if (dataType == "string") {
res.send('<p>Some HTML...</p>')
// An array or object is represented as JSON.
} else if (dataType == "object") {
res.send({Hello: "World"})
} else if (dataType == "array") {
res.send([1, 2, 3])
} else {
// Error handling . . .
}
})
...
身体参数也可以接受缓冲对象或布尔值。
2.咀嚼16
res.status
可用于设置响应的状态代码。查看this guide以查看常见状态代码列表。
您可以在致电res.status()
的电话中链条res.send()
设置已发送的响应状态。
在上一个示例中,我们可以发送404 not found
状态代码以指示服务器上找不到资源。
...
} else {
res.status(404).send(<p>Resource not found.</p>)
}
3. res.json()
res.json()
方法也可用于将JSON发送给客户端。这具有与使用res.send()
发送数组或对象(或对象数组)相同的功能。
...
app.get('/:sendType', (req, res) => {
let {sendType} = req.params
sendType = sendType.toLowerCase()
if (sendType == 'json') {
res.json([{Hello: "World"}])
}
else if (sendType == 'send') {
res.send([{Hello: "World"}])
}
// Both of these responses function the same
})
就个人而言,如果我想发送json和req.send()
,我将使用res.json()
,如果我想发送一个字符串以使代码更易于理解。
4. Courex26
res.redirect()
方法用于将客户端重定向到其他URL。默认情况下,默认情况下,这也将将状态代码设置为302 Found
,但是该方法确实采用可选参数来设置自定义状态代码。
...
app.get('/:someUrl', (req, res) => {
let {someUrl} = req.params
someUrl = someUrl.toLowerCase()
if (someUrl == 'default') {
// Redirect the client to /thisUrl
// with status code `302 Found`.
res.redirect('/thisUrl')
}
else if (someUrl == 'customStatus') {
// Redirect the client to /anotherUrl
// with the status code `301 Moved Permanently`.
res.redirect(301, '/anotherUrl')
}
})
您拥有它 - 您可以用来帮助 hack and Destain 建立未来社区及其技术堆栈的一些重要属性和响应对象的一些重要属性和方法。
您只能在2月的最后一个星期一向我发送问题。但是只有在leap日。
在2044年见。