千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 深入了解router.post

深入了解router.post

来源:千锋教育
发布人:xqq
时间: 2023-11-24 11:23:43 1700796223

在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 请求,并简化您的代码。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT