专栏首页十月梦想Express框架之中间件(一)

Express框架之中间件(一)

中间件其实也是get和post等的匹配

如果我的的get、post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了。

如果想往下匹配的话,那么需要写next()   如果没有next则无法匹配到下一个

1           app.get("/",function(req,res,next){
2               console.log("1");
3               next();
4           });
5            
6           app.get("/",function(req,res){
7               console.log("2");
8           });

下面两个路由,感觉没有关系:

1           app.get("/:username/:id",function(req,res){
2               console.log("1");
3               res.send("用户信息" + req.params.username);
4           });
5            
6           app.get("/admin/login",function(req,res){
7               console.log("2");
8               res.send("管理员登录");
9           });

但是实际上冲突了,因为admin可以当做用户名 login可以当做id。

解决方法1:交换位置。 也就是说,express中所有的路由(中间件)的顺序至关重要。

匹配上第一个,就不会往下匹配了。 具体的往上写,抽象的往下写。

1           app.get("/admin/login",function(req,res){
2               console.log("2");
3               res.send("管理员登录");
4           });
5            
6           app.get("/:username/:id",function(req,res){
7               console.log("1");
8               res.send("用户信息" + req.params.username);
9           });

解决方法2:

1           app.get("/:username/:id",function(req,res,next){
2               var username = req.params.username;
3               //检索数据库,如果username不存在,那么next()
4               if(检索数据库){
5                   console.log("1");
6                   res.send("用户信息");
7               }else{
8                   next();
9               }
10      });
11       
12      app.get("/admin/login",function(req,res){
13          console.log("2");
14          res.send("管理员登录");
15      });

路由get、post这些东西,就是中间件,中间件讲究顺序,匹配上第一个之后,就不会往后匹配了。next函数才能够继续往后匹配。 所以我们在参数新增next,用来继续匹配其他内容!

中间件实则就是这些post用于解决冲突来解决的一种办法,下面一篇我们使用use来讲述另外一个中间件!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nodejs+express实现用户登录,注册以及退出操作

    先从用户注册说起吧,毕竟注册才能去数据库增加数据,然后在增加校验,本次先从注册===>登录===>退出这个层次顺序说起!接下来看一下用户注册!

    十月梦想
  • node登陆验证(seession判断是否登陆以及密码MD5加密)

    通常下,登陆通过数据库校对进行判断登陆是否正确,在登陆页登陆后,登陆所以页面都会提示已经成功登陆(session),下面看一下结合MD5加密校对数据库用户登录,...

    十月梦想
  • node读取html文件

    node和Apache是没有web容器的,node的目录下的同级文件是无法使用/filename进行访问的,因为node没有根目录门也没用web容器!

    十月梦想
  • python开发web服务 bottle框架

    开发功能不是特别复杂的web服务,可以考虑使用bottle框架。原因:一、Python开发效率高呀!不信你比比同样的功能Python几行可以搞定?换java试试...

    震八方紫面昆仑侠
  • Android原生侧滑控件DrawerLayout使用方法详解

    在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的“抽屉”功能,此控件使用简单,效果很柔和,操作起来体验非常...

    砸漏
  • python3 爬虫第三步 学会正则表达式

    正则表达式是自由的,一个字符的含义往往代表着一类字符,通过多个正则正则符号的组合描述,可以使组成的正则表达式能够描述一类字符串。

    公众号 碧油鸡
  • python3 爬虫第三步 本文包你学会正则 不会就来锤我

    正则表达式是一种描述字符的一种方式,通过该方式,匹配字符串。 正则表达式是自由的,一个字符的含义往往代表着一类字符,通过多个正则正则符号的组合描述,可以使组成...

    公众号 碧油鸡
  • 【LEETCODE】模拟面试-206. Reverse Linked List

    图:新生大学 https://leetcode.com/problems/reverse-linked-list/ Reverse a singly link...

    杨熹
  • go:文件按行读取

    超级大猪
  • python学习之类与对象的初始化函数init用法

    初始化传入的值想要被其他方法调用,就要把这些值赋值给对象,也就是self.属性名,,只有赋值给对象的属性才能被其他方法调用,(也可以赋值给类,这样的话对象和类都...

    吾爱乐享

扫码关注云+社区

领取腾讯云代金券