在Node.js中,router.post()是一種定義Express應用程序中特定網站路徑的方式,用於處理HTTP POST請求。這個API是Express中最常用的路由方法之一,它允許我們使用路由路徑(路徑字符串或 RegExp)、中間件功能和回調函數來響應客戶端的POST請求。
一、基本使用
使用router.post()定義一個路由。可以是鏈式語法,也可以使用單獨的語法,如下所示:
const express = require('express')
const app = express()
// 使用鏈式語法
app.post('/user', function (req, res) {
res.send('Got a POST request')
})
// 使用單獨的語法
const router = express.Router()
router.post('/user', function (req, res) {
res.send('Got a POST request')
})
app.use('/', router)
這段代碼定義了一個單獨的路由段,並將其與Express應用程序關聯起來。每當客戶端發出POST請求並匹配該路徑時,響應函數就會被調用。這個回調函數中的兩個參數,req和res,分別表示請求和響應。
二、路由路徑匹配
Express使用字符串模式匹配請求路徑。路由路徑支持多種類型的匹配。
1、字符串模式匹配
// 匹配根路徑
app.post('/', function (req, res) {
res.send('root')
})
// 匹配 /about 路徑
app.post('/about', function (req, res) {
res.send('about')
})
// 匹配 /random.text 路徑
app.post('/random.text', function (req, res) {
res.send('random.text')
})
2、基本參數匹配
路由路徑可以包含命名參數,以冒號(:)開頭,例如:
// 匹配 /user/123 路徑
app.post('/user/:userid', function (req, res) {
res.send('user ' + req.params.userid)
})
在這個例子中,請求路徑 /user/123 中的 userid 的值可以通過 req.params.userid 得到。它是一個對象,包含了一個鍵值對,其中鍵是參數名,值是請求參數。
3、正則表達式匹配
路由路徑可以包含正則表達式。例如,可以匹配所有以 /text/ 開頭的路徑的路由的路徑如下:
// 匹配任何路徑中含有 a 的路徑
app.post(/a/, function (req, res) {
res.send('regex')
})
三、路由處理函數
路由路徑匹配時,Express 將請求和響應對象傳遞給中間件函數。路由處理函數可以根據需要接受多個回調函數,以獲取請求和響應的處理,如下:
// 處理POST請求
app.post('/user', function (req, res) {
res.send('Got a POST request')
})
// 使用多個處理函數
app.post('/example/b', function (req, res, next) {
console.log('第一個處理函數')
next()
}, function (req, res) {
console.log('第二個處理函數')
res.send('使用了多個處理函數')
})
在這個例子中,在第一個路由處理函數中,使用了next()函數調用了第二個路由處理函數。「next」函數被用於將控制傳遞給堆棧中下一個中間件功能。
四、請求和響應
當路由匹配時,可以使用 req 和 res 對象來處理請求和響應的信息。
1、請求對象(req)
請求對象(req)表示HTTP請求並具有請求查詢字符串,參數,正文,HTTP標頭等屬性。例如:
// 包含請求信息的JSON
{
"body": {},
"params": {},
"query": {},
"route": {},
"headers": {}
}
其中最為常用的方法有:
req.body– 該屬性包含提交到 POST 路由的數據,並根據 Content-Type 頭解析。使用一個中間件來處理 application/json 的 POST 數據非常常見。req.params– 正如我們在前面的部分中看到的,包含在 URL 中的命名參數數組。req.query– 包含以鍵值對形式的查詢字符串參數。req.route– 當前匹配的路由的信息。req.headers– 請求頭對象。
2、響應對象(res)
響應對象表示HTTP響應,可以將它傳遞給路由處理函數以發送響應給客戶端。
// 包含請求信息的JSON
{
"headers": {},
"sent": false,
"status": 200,
"statusCode": 200
}
其中最為常用的屬性和方法有:
res.sendFile()– 將文件作為兌現響應發送res.json()– 發送一個JSON響應。res.render()– 渲染一個視圖模板。res.sendStatus()– 設置響應狀態代碼,並將其發送。res.send()– 向客戶端發送HTTP響應。res.status()– 設置HTTP響應狀態碼。
五、中間件函數
中間件函數是在一個路由處理之前執行的函數,也可以在具體的路由處理函數內添加中間件。
1、使用app.use()
使用app.use()或者router.use()函數定義中間件函數。下面的例子展示了如何使用中間件函數處理HTTP請求日誌:
const express = require('express')
const app = express()
// 日誌中間件
const logMiddleware = function (req, res, next) {
console.log(`${Date.now()} ${req.method} ${req.url}`)
next()
}
app.use(logMiddleware)
// GET方法路由
app.get('/user', function (req, res) {
res.send('GET request to homepage')
})
// POST方法路由
app.post('/user', function (req, res) {
res.send('POST request to homepage')
})
在這個例子中,logMiddleware是我們定義的一個中間件函數。使用 app.use() 將其應用於所有路由。每當發出 GET或POST請求時,都會輸出請求的HTTP方法和URL。
2、在路由中使用多個中間件
此外,可以在和路由處理程序相同的回調函數中使用多個中間件,這使得很容易定義具有可重用功能的路由處理程序。下面的例子展示了如何在處理POST請求之前使用中間件驗證請求:
const express = require('express')
const app = express()
// 處理validate中間件
const validateUser = function (req, res, next) {
req.user = { name: 'John Doe' }
next()
}
app.use(validateUser)
// POST方法路由
app.post('/user', function (req, res) {
console.log(req.user)
res.send('POST request to homepage')
})
在這個例子中,我們定義了一個名為 validateUser 的中間件函數。它在 app.use() 中使用,以確保所有請求都被驗證。在 POST 路由中,我們可以訪問 req.user,這是從 validate 中間件中添加到請求中的。
六、總結
在 Express 中使用 router.post() 方法處理 HTTP POST 請求的步驟總結如下:
- 使用
app.post()或router.post()方法定義路由。 - 匹配路由路徑,根據需要使用請求對象
(req)和響應對象(res)。 - 如果需要,定義中間件函數使用
app.use()或router.use()。
通過使用這個方法,您可以更有效地處理 HTTP POST 請求,並簡化您的代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/249182.html
微信掃一掃
支付寶掃一掃