当前位置: 首页 > news >正文

Express 路由

路由:实际上就是映射关系

现实中的路由案例:打10086时候 有那些按键 按键1-------业务1 按键2------业务2

 在这里:路由=按键与服务之间的映射关系


Express中的路由:是客户端的请求服务器处理函数之间的映射关系

Express中的路由组成的三部分:

  • 请求的类型
  • 请求的URL地址
  • 处理函数

 ——app.METHOD(PATH,HANDLER)  

METHOD---请求类型(GET\POST)

PATH——请求的url地址(与客户端的相关)

HANDLER——处理函数,与之对应的处理函数(映射到服务器端的处理函数)

简单的路由1:get请求类型

app.get('/user',function(req,res){
    res.send({"name":"zj","age":66,"gender":"男"} )
})

简单的路由1:post请求类型

app.post('/user',function(req,res){
    res.send('post请求的响应')
})


 路由的匹配过程 

每一个请求到达服务器的时候,需要经过路由的匹配,匹配成功才会调用对应的处理函数 

在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的URL同时匹配成功,则Express会将这次请求,转交给对应的function函数进行处理——客户端的请求会从上到下进行匹配路由


路由最简单的用法:将在服务器上挂载路由——实验案例

首先新建文件夹——然后运行npm init -y——初始化package.json文件

——然后在你的文件夹下安装需要的包-- npm i express

使用:  nodemon .\最简单的路由服务器.js启动服务器


//导入express模块
const express=require('express')

//创建web服务器
const app=express()
//挂载路由
app.get('/',(req,res)=>{
    res.send('处理函数 这是服务器给的 响应客户端的根url的get请求')
})
app.post('/',(req,res)=>{
    res.send('处理函数 这是服务器给的 响应客户端的根url的post请求')
})

//启动服务器、使用80端口
app.listen(80,()=>{
    console.log('http://127.0.0.1 启动成功')
})

 

 

 

但上述的挂载路由(直接挂载在APP上)的方式实际中不常用——  导致代码量太多,不方便管理--使用路由模块化管理--将路由抽离为单独的模块


 路由模块化创建

  • 创建路由模块对应的.js文件——自定义的文件,专门用于挂载路由
  • 调用express.Router()函数创建路由对象(路由的实例)——前面的时候:const app=express()返回的是app,服务器的实例
  • 路由实例对象上挂载具体的路由(原来是app上)
  • 使用module.exports向外共享路由对象
  • 使用app.use()注册路由模块

 

//导入express
const express=require('express')
//创建路由对象
const Router=express.Router()
//挂载具体路由
Router.get('/user/a',function(req,res){
    res.send('GET USER A')
})
Router.post('/user/b',(req,res)=>{
    res.send('POST USER B')
})
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}

路由模块的注册和使用

使用require导入路由模块,使用app.use(自定义路由模块)注册模块------让路由模块和服务器之间联系起来

原先使用express向外托管静态资源的时候使用过app.use(express.static('文件夹的路径'))

app.use()的作用:用来注册全局中间件--

//导入express
const express=require('express')
//创建路由对象
const Router=express.Router()
//挂载具体路由
Router.get('/user/a',function(req,res){
    res.send('GET USER A')
})
Router.post('/user/b',(req,res)=>{
    res.send('POST USER B')
})
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}

 


为路由模块添加统一的访问前缀——在前面托管静态资源的时候有使用过app.use(express.static('文件夹的路径'))------我们使用url访问静态资源的时候这个文件夹是不会出现在访问路径中——如果希望我们访问的时候有这个地址,我们需要在前面加上一个参数,app.use('/文件夹名字',express.static('文件夹的路径'))——相似

app.use('/api',router)------------在原先路由的访问url中全部加上了一个前缀

 

相关文章:

  • 2022蓝帽杯初赛电子取证
  • 数据结构与算法复习:第三十六弹
  • CSS - 响应式布局(一)媒体查询
  • 【JAVA预备】课程目录
  • 2022年0902Maven的依赖学习<第四课>
  • Android 11 上的文件读写权限(MANAGE_EXTERNAL_STORAGE)
  • Vue模板语法(01)
  • 世界第一台通用计算机:ENIAC
  • JAVA学习----HashSet类
  • 文章组合生成-免费文章组合生成软件
  • 华为面试应该怎么准备?
  • JDBC如何记忆
  • C语言之预处理
  • Flutter 系列---入门篇
  • 全球与中国汽车多楔带行业发展趋向分析及投资前景预测报告2022-2028年
  • Android框架之Volley
  • Asm.js的简单介绍
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java反射-动态类加载和重新加载
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • leetcode388. Longest Absolute File Path
  • Median of Two Sorted Arrays
  • python学习笔记-类对象的信息
  • Webpack 4 学习01(基础配置)
  • 阿里云购买磁盘后挂载
  • 成为一名优秀的Developer的书单
  • 电商搜索引擎的架构设计和性能优化
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 将回调地狱按在地上摩擦的Promise
  • 两列自适应布局方案整理
  • 每天一个设计模式之命令模式
  • 三栏布局总结
  • 使用 @font-face
  • 算法-图和图算法
  • 详解移动APP与web APP的区别
  • 学习笔记TF060:图像语音结合,看图说话
  •  一套莫尔斯电报听写、翻译系统
  • 用Canvas画一棵二叉树
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​ssh免密码登录设置及问题总结
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2)(2.10) LTM telemetry
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (day 12)JavaScript学习笔记(数组3)
  • (Oracle)SQL优化技巧(一):分页查询
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (五)网络优化与超参数选择--九五小庞
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)WLAN定义和基本架构转
  • (转)Mysql的优化设置
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)利用ant在Mac 下自动化打包签名Android程序