Node.js后端开发 - 进阶篇 #5 express框架之正则表达式注册路由、req.params获取路由中的参数

文章目录

一、前言

二、正则表达式注册路由

---完整测试代码如下

三、req.params获取路由中的参数

最终效果

---完整测试代码如下

额外注意


一、前言

上篇文章我们讲了express之注册路由app.get、app.use、app.all 的区别,详细可参考博文:Node.js后端开发 - 进阶篇 #4 express之注册路由app.get、app.use、app.all 的区别,这篇文章我们将讲解正则表达式注册路由,以及req.params获取路由中的参数

二、正则表达式注册路由

上篇文章我们讲到这样一段代码,如下

//注册一个get请求 /register 的路由
//此注册路由的意思:
//1、请求方法必须是get
//2、请求路径的 pathname 必须等于(===)/register
app.get('/register', function (req, res) {
    res.send('register')
});

然后我们在发送请求的时候,需要注意的是:

(1)它区别请求方法,get/post/put等请求必须一一对应上,才能匹配到

(2)请求路径pathname必须和 /register 完全匹配

现在我们有一个需求,就是 /register、/register/xxx、/register/xxx/yyy 等都能匹配,/registerabcd不让它匹配,那么这个怎么实现呢?这个时候我们可以使用正则表达式,如下

app.get(/^\/register(\/.+)*$/, function (req, res) {
    res.send('register')
});

/^\/register(\/.+)*$/ 这个就是我们写的正则表达式,

其中 /^ 表示正则表达式的开头,

$/ 表示结尾,

\/ 这个是斜杆/ 的转义,

(\/.+)* 其中 .+ 表示任意字符出现一次或多次,*表示小括号里面的出现零次或多次。

如果xxx表示任意字符,也就是/xxx会出现零次或多次。这样就实现了我们上面的需求了,

---完整测试代码如下

//1、加载express模块
// const express:声明express变量,
// 这个express变量它是一个对象,它也可以作为一个函数来调用
const express = require('express');

//2、创建一个app对象( 类似于创建一个server对象 )
const app = express();//express作为一个函数来调用

//---------注册路由---------
//通过中间件监听指定的路由的请求
app.get(/^\/register(\/.+)*$/, function (req, res) {
    res.send('register')
});

//3、启动服务
//参数1:要监听的端口  参数2:回调函数
app.listen(3000, function () {
    console.log('http://localhost:3030');
});

我们可以在浏览器中输入地址试试

http://localhost:3000/register

http://localhost:3000/register/xxx

http://localhost:3000/register/xxx/yyy

所以说我们注册路由,既可以像 /register 这样写死,也可以用正则表达式来匹配,你写的正则表达式越丰富它的功能就越强大。

三、req.params获取路由中的参数

我们有时候经常会看到这样的路径:http://localhost:3000/news/2018/12/08 去请求或传参数,那么这种情况我们nodejs后端的路由怎么来写呢?我们没讲express框架之前,是这样获取的(详见:Node.js后端开发 - 基础篇 #15 web 服务器 part 7 使用 GET 或 POST 请求发送数据

var params = url.parse(request.url, true).query;

下面我们来看看express框架是怎么得到的,看如下的代码

app.get('/news/:year/:month/:day', function (req, res) {
    res.send(req.params);
});

最终效果

---完整测试代码如下

//1、加载express模块
// const express:声明express变量,
// 这个express变量它是一个对象,它也可以作为一个函数来调用
const express = require('express');

//2、创建一个app对象( 类似于创建一个server对象 )
const app = express();//express作为一个函数来调用


//---------注册路由---------
//通过中间件监听指定的路由的请求
app.get('/news/:year/:month/:day', function (req, res) {
    res.send(req.params);
});

//3、启动服务
//参数1:要监听的端口  参数2:回调函数
app.listen(3000, function () {
    console.log('http://localhost:3030');
});

额外注意

1、你也可以这样 req.params.year 单独获取某一个参数,那么得到的值是2018

2、另外几个字段名,可以随自己定义,如我把day改为xxx

app.get('/news/:year/:month/:xxx', function (req, res) {
    res.send(req.params.xxx);
});

那么得到的这个xxx的值为08

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值