express路由简单介绍

目录

1.路由路径的匹配

1.1 字符串模式

1.2 正则匹配模式

2.路由器的处理程序

2.1 单处理程序

3.express 子应用程序

 4.express路由

4.1 路由的简介

4.2 express路由的使用

4.3 路由模块化


路由器的行为类似于中间件本身,因为可以将其用作 app.use() 的参数或用作另一台路由器方法 use() 的参数.

顶级express对象具有创建新对象的 Router() 方法 router .

1.路由路径的匹配

路由路径的匹配有两种模式,一种是字符串模式,另外一种是正则匹配模式.

1.1 字符串模式

  • 固定模式
app.get('/index',(req,res) => {
    res.send(`<h2>首页</h2>`);
})
  • 通配符匹配
//1.2 通配符匹配,匹配所有路径
app.get('/*',(req,res) => {
    res.send(`<h2>首页</h2>`);
})

//匹配以index开头的所有路径
/*
	/index  可以匹配成功
	/index123  可以匹配成功
	/index/a/b 可以匹配成功
*/
app.get('/index*',(req,res) => {
    res.send(`<h2>首页</h2>`);
})

//匹配以/index/ 开头的路径
app.get('/index/*',(req,res) => {
    res.send(`<h2>首页</h2>`);
})
  • ? 前面的字符出现0~1次
//1.3  ? 前面的字符或组出现0~1 次
/*
	/abce      可以匹配成功
	/ace       可以匹配成功
*/
app.get('/ab?ce',(req,res) => {
    res.send(`<h2>首页</h2>`);
})
  • + 前面的字符出现1~多次
//1.4 + 前面的字符或组出现1~多 次
 /*
 	/abce      可以匹配成功
 	/abbbce    可以匹配成功
 	/ace    	  不能匹配成功
 */

app.get('/ab+ce',(req,res) => {
    res.send(`<h2>首页</h2>`);
})
  • * 表示出现任意个数的任意字符
//1.5  * 表示任意个数的任意字符
/*
	/abc      可以匹配成功
	/ab123c    可以匹配成功
*/
app.get("/ab*c", (req,res) => {
    res.send(`<h2>首页</h2>`);
})
  • () 里的内容为一组
//1.6 ()里的内容为一组
/*
	/abcd      可以匹配成功
	/ad    		可以匹配成功
	/abd    	  不能匹配成功
	/acd    	  不能匹配成功
*/
app.get("/a(bc)?d", (req,res) => {
    res.send(`<h2>首页</h2>`);
})

1.2 正则匹配模式

//1. 包含index的路径
/*
	/index  可以匹配
	/aindexb 可以匹配成功
	/a/index/b  可以匹配成功
*/
app.get(/index/, (req,res) => {})

// 2. 以.html后缀名结尾的路径
/*
	/index.html  可以匹配
	/index/a.html 可以匹配成功
*/
app.get(/.*\.html$/, (req,res) => {})

2.路由器的处理程序

2.1 单处理程序

const express = require('express');

const app = express();

//方式一
app.get('/',(req,res) =>{
    res.send(`<h1>首页</h1>`)
})

//方式二
let handle = (req,res) => {
    res.send(`<h1>学生页面</h1>`)
}
app.get ('/student',handle);
//监听端口
app.listen(3000,()=>{
    console.log('server start at 3000 port');
})

2.2 多处理程序

除非是最后一次处理,否则请不要执行res.send()等发送指令

除非是最后一次处理,否则请不要忘记next形参 与next() 指令

const express = require('express');

const app = express();

//方式一
//除非是最后一次处理,否则请不要执行res.send()等发送指令
// 除非是最后一次处理,否则请不要忘记next形参 与next() 指令
app.get("/", (req,res,next) => {
    console.log("handle 1")
    next()
},(req,res,next) => {
    console.log("handle 2")
    next()
},(req,res) => {
    res.send("Hello wrold")
})


//方式二
let handle1 = (req,res,next) =>{
    console.log("handle 1")
    next()
}
let handle2 = (req,res,next) =>{
    console.log("handle 2")
    next()
}
let handle3 = (req,res,next) =>{
   res.send('hello world')
}
app.get('/',[handle1,handle2,handle3])
//监听端口
app.listen(3000,()=>{
    console.log('server start at 3000 port');
})

3.express 子应用程序

express模块 每一次执行都会创建一个应用

将子应用通过主应用的use方法挂在到主应用

项目结构如下:

创建学生应用

const express = require('express')

// 创建学生应用
const student = express();

// student路由
student.get("/",(req,res) => {
    res.send("student 应用的首页")
})
student.get("/getStudent",(req,res) => {
    res.send("student 应用的获取学员信息")
})

//导出学生应用
module.exports = student

创建教师应用

const express = require('express')

// 创建教室应用
const teacher = express();


// teachert路由
teacher.get("/",(req,res) => {
    res.send("teacher 应用的首页")
})
teacher.get("/getTeacher",(req,res) => {
    res.send("teacher 应用的获取教师信息")
})

//导出教师应用
module.exports = teacher

创建主应用

const express = require('express');

//引入学生路由和教师路由
const student = require('./extrouter/Student');
const teacher = require('./extrouter/Teacher');

//创建主应用程序
const app = express();

//关联主应用程序和子应用程序
app.use("/student",student );
app.use('/teacher',teacher);

app.get('/' ,(req,res) => {
    res.send(`<h1>首页</h1>`);
})

//监听端口
app.listen(3000,() => {
    console.log('server start at 3000 port');
})

 4.express路由

4.1 路由的简介

路由是指接收用户请求,处理用户数据,返回处理结果给用户的一套程序

后端路由的核心是 URL

app.get("/",(req,res,next) => {
    
})

4.2 express路由的使用

虽然现在可以通过app.get或app.post 定义路由了, 但是在一个项目中, 路由的数量是非常多的, 如果把所有的路由都放在同一文件中,那将是非常可怕的事情,所以express 为了解决这个问题, 提供了模块化构建路由的方式, 我们可以根据条件将路由进行分类.

express 路由使用语法

app.method(path, handle)

参数了解

  1. app: express 实例

  2. method: http 请求方式

  3. path: 请求路径

  4. handle: 路由匹配后执行的函数

//创建路由
const router = express.Router();

router.get('/',(req,res) =>{
    res.send(`<h1>首页</h1>`)
})

4.3 路由模块化

express.Router 类可以创建模块化(独立的),可以挂载的路由对象.Router对象是一个完整的中间件和路由系统,因此常称其为一个"mini-app"

需求: 创建一个router路由模块,接受所有 router目录下的所有请求,响应数据

  1. 创建router模块

  2. 编写路由模块的代码

const express = require('express');
//引入学生应用和教师应用
const student = require('./student');
const teacher = require('./teacher');

//创建路由
const router = express.Router();

router.get('/',(req,res) =>{
    res.send(`<h1>首页</h1>`)
})

//关联主应用和子应用
router.use('/student',student);
router.use('/teacher',teacher);
//导出学生应用
module.exports = router;

     3. 将编写好的路由模块引入到主模块,由主模块分配对应的请求到该模块去处理

const express = require('express');
//引入模块
const router = require('./router/index')


//创建主应用
const app = express();

//通过中间件建立主应用和子模块之间的关系
app.use(router);

//监听端口
app.listen(3000,()=> {
    console.log('server start at 3000 port');
})

学生应用和教师应用代码与上面express子应用部分相同.

项目结构如下:

猜你喜欢

转载自blog.csdn.net/lhrdlp/article/details/105768753