关于Express路由,这篇总结的很全面

通常我们在浏览器地址栏中访问一个页面时,HTTP请求的URL格式是这样的:

http://host[:port][path]

http:表示一种网络协议。

host:表示主机。

port:表示端口,可选字段,不提供时默认为80。

path:指定请求资源的URI(统一资源标识符),如果URL中没有给出path,一般会默认成”/“(通常由浏览器或者其它HTTP客户端完成补上)

然而,所谓路由,就是如何处理HTTP请求中的路径部分

(比如“http://xxx.com/list/news”这个URL,路由将决定怎么处理/list/news这个路径)

app.get(‘/’,callback)

上面这个代码我们很熟悉了,表示我们添加了一条路由,指定”/“这个路径由get的第二个参数所代表的函数callback来处理。

[下面开始讲Express路由]

来看一下Express的路由定义规则:

app.verb(path,[callback...],callback)

同样,对这个定义公式的每个参数说明一下:

1、verb表示方法,可以是get、post、put、delete等,常用的当然就是前面两个。

2、path表示路径,可以是一个字符串(String),也可以是一个正则表达式(Regex)。

3、callback表示路径处理函数,里面有个next方法,可以用next(),也可以用next('router'),下面我会用实例来说明它们的区别。

由上可见,关于verb只要知道url发送的是get请求和表单可提交post请求数据就行,所以,本篇下面开始就从path和callback两个点来介绍Express路由的几乎所有使用规则。

一、路由中的路径(path)

String:

路径是字符串的情况,举三个例子:

1、匹配/list

在地址栏中输入:

http://localhost:1234/list

浏览器窗口输出:

This is list

2、匹配/list/news

http://localhost:1234/list/news

This is news

3、匹配/list/news/123

http://localhost:1234/list/news/123

This is list news:123

Regex:

路径是正则表达式的情况,举两个例子:

1、匹配/mobile/1[十个数字]

http://localhost:1234/mobile/1开头11位数字

This is a mobile ......

2、匹配abcd和acd

http://localhost:1234/abcd

匹配abcd和acd

好了,这些并不难,在举例子就是讲正则表达式了,哈

二、路由中的句柄(callback)

有关路由中的句柄,这里我讲清楚两个问题:

1、next()和next('route')

这两个方法是路由反馈函数自带的方法。

实例如下图所示:

有三个位置加了next()或者next('route'),我们这里只需要讲清楚这两者的区别,我们就只需要关注位置1,为了让第二个相同路由执行,位置2可以是next(),也可以是next('router'),表示执行下一个相同路由。

通过测试,发现:

当位置1是next()时输出的是:

1234

当位置1是next('router')时输出的是:

134

由此可知,当位置1是next()方法时,会先执行下一个callback,当为next('router')时,会直接跳过下一个callback直接执行下一个相同路由。这也就是二者区别。

2、app.param()

app.param在路由中也相当于是一个中间件的作用,具体看一下下面这个实例:

'listname'的param方法会在’listname‘路由get之前执行。这里一定要强调listname,因为参数是一一对应的。上面这个新实例将输出:

list:item0item1item2

比如我们需要通过一个路由参数去取相应的数据,这个时候通常的做法是写函数来处理,有了param方法后就可以将这些逻辑写在这个方法里了。

三、写到最后总结

当然,Express路由还有一些其它的知识点,比如,app.all(""):能处理任意请求类型,再比如,利用app.route("").get().post().all()实现一个路径处理多个请求方式。这些感觉不是很常用,没有做专门的实现总结 ,感兴趣的童靴可以自己写个DEMO测一下。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值