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 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python导入标准库和扩展库对象的几种方式

Python中的对象大概可以分为三类:内置对象、标准库对象和扩展库对象。其中内置对象是直接编译进解释器的可以直接使用,没有对应的Python源代码;标准库对象是...

5258
来自专栏CaiRui

Python之简单的用户登录和注册

#!/bin/bash/env python # -*- coding:utf-8 -*- def login(username,password): ...

28610
来自专栏向治洪

volatile和synchronized的区别和联系

volatile 它所修饰的变量不保留拷贝,直接访问主内存中的。    在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄...

2088
来自专栏知识分享

(一)Lua脚本语言入门

今天开始自己的Lua语言学习,Lua脚本语言,是介于应用程序和开发其应用程序的底层编程语言之间,,它很方便调用其它语言,它只是在载入时对其进行编译,而不像我们写...

3787
来自专栏Java学习网

Java多线程技术的9大知识点总结——精心整理

1,进程和线程的概念。 |--进程:是程序的动态执行过程,它经历了从代码加载,执行,到执行完毕的一个完整过程。 |--线程:是实现并发机制的一个有效手段。 ? ...

2576
来自专栏lgp20151222

idea报错:Error running $classname: Command line is too long. Shorten command line for $classname.

打印的变量太长了,超过了限制,这都会报错...我只想知道idea基于什么原理会报这个错...

9523
来自专栏用户2442861的专栏

express 与 express-generator

其实express只是一个框架,那么npm install -g express 也仅仅是安装了这个框架,其作用是自己构建express项目的时候,库已经可以引...

2201
来自专栏企鹅号快讯

Python模块

Python模块 可以将代码量较大的程序分割成多个有组织的、彼此独立但又能相互交互的代码片段,这些自我包含的有组织的代码段就是模块 模块在物理形式上表现为以.p...

2347
来自专栏dizhiling专栏

一行命令实现cpu占用率100%

cat /proc/cpuinfo |grep "physical id" | wc -l 可以获得CPU的个数, 我们将其表示为N.

1201
来自专栏Python小屋

Python多线程编程中daemon属性的作用

在脚本运行过程中有一个主线程,若在主线程中创建了子线程,当主线程结束时根据子线程daemon属性值的不同可能会发生下面的两种情况之一: 如果某个子线程的daem...

3405

扫码关注云+社区

领取腾讯云代金券