Nodejs -- Express 路由原理及设置模块化路由

news2025/7/14 13:56:49

文章目录

    • 1. 路由的概念
      • 1.1 什么是路由
      • 1.2 显示生活中的路由
      • 1.3 Express中的路由
      • 1.4 Express中路由的例子
      • 1.5 路由的匹配过程
    • 2 路由的使用
      • 2.1 最简单的用法
      • 2.2 模块化路由
      • 2.3 为路由模块添加统一前缀

1. 路由的概念

1.1 什么是路由

广义上来讲,路由就是映射关系

1.2 显示生活中的路由

image-20221128152210506

1.3 Express中的路由

在Express中,路由指的是客户瑞的请求服务器处理函数之间的映射关系.

Express中的路由分3部分组成,分别是请求的类型、请求的URL地址、处理函数,格式如下:

app.METHOD(PATH, HANDLER)

1.4 Express中路由的例子

//四配GET清求,且请求URL为/
app.get('/',function (req,res){
    res.send('Hello World!')
})

//匹配POST请求,且请求URL为/
app.post('/',function (req,res){
    res.send('Got a POST request')
})

1.5 路由的匹配过程

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。

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

image-20221128152608226

路由匹配的注意点:

  • 按照定义的先后顺序进行匹配
  • 请求类型请求的URL同时匹配成功,才会调用对应的处理函数

2 路由的使用

2.1 最简单的用法

在Express中使用路由最简单的方式,就是把路由挂载到app上,示例代码如下:

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

// 创建web服务器
const app = express()

// 启动服务器
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1')
})

// 挂载路由
app.get('/user', (req, res) => {
    console.log(req.query)
    res.send(req.query)
})

app.post('/user', (req, res) => {
    res.send("请求成功")
})

但是当项目比较大的时候,会导致app上挂载了过多的路由,所以一般不会采用这种方式挂载

2.2 模块化路由

为了方便对路由进行模块化的管理,Express不建议将路由直接挂载到app上,而是推荐将路由抽离为单独的模块。

将路由抽离为单独模块的步骤如下:

  • 创建路由模块对应的js文件
  • 调用express.Router0()数创建路由对象
  • 向路由对象上挂载具体的路由
  • 使用module.exports向外共享路由对象
  • 使用app.use()函数注册路由模块

index.js

// 导入express
const express = require('express')
const router = require("./router")

// 创建web服务器
const app = express()

// 挂载路由
app.use(router)

// 启动服务器
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1')
})

router.js

const express = require("express")
const router = express.Router()

router.get('/user', (req, res) => {
    console.log(req.query)
    res.send(req.query)
})

router.get('/user/:id/:name', (req, res) => {
    // 这里的 :id 是一个动态参数
    console.log(req.params)
    res.send(req.params)
})

router.post('/user', (req, res) => {
    res.send("请求成功")
})

module.exports = router

2.3 为路由模块添加统一前缀

类似于托管静态资源时,为静态资源统一挂载访问前缀一样,路由模块添加前缀的方式也非常简单:

const router = require("./router")

// 挂载路由,添加统一前缀 /api
app.use("/api", router)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yarn : 无法加载文件 C:\Users\sunlight\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。

问题: yarn安装好了,vscode报错 报错问题:yarn 无法加载文件 C:\Users\sunlight\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。 具体问题:cmd(管理员运行)中安装好了yarn &…

Angular使用管道和指令进行多语言切换

工作中经常遇到需要进行多种语言切换的项目。本文记录了一种在Angular页面中通过使用管道和自定义指令实现的语言切换方案。 1、实现效果 页面显示文字根据选择的语言自动进行翻译切换,如下图所示: 此时,页面模板的字符串全部按照管道格式书…

2023年IB生物有什么变化?

今天我们详细了解下2023年IBDP生物新课程内容、考试评估、内容、技能发展、科学本质等详细内容。IBDP生物新课程概述 IBDP新生物课程将于2023年2月开课,2023年8月首次授课,2025年5月进行首次考试。新课程反映社会变革,更加关注技能和概念、背…

【iMessage苹果推群发】苹果相册推archive到appstore开发证书(Development certificate)

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

DCHP通讯协议

从通讯TCP/IP的构成传输,到IP地址的分类,再到局域网与广域网的设置。 通讯协议的构成概述IPDHCP-设定动态IPDNS数据的流动广域网 网关局域网 交换机NAT桥接模式实操概述 前景知识:虚拟机与工艺库管理 扩展:NAT模式的实操。 1、T…

yolov5量化注意事项

(1)使用onnxsim 0.4.1版本、ort版本1.13.1 否则使用--dynamic True时所生成的onnx就会乱掉。 (2)利用trtexec生成engine 所使用的命令如下: trtexec.exe --onnxyolov5n_ptq_detect_dynamic.onnx --saveEngineptq_int…

小白学流程引擎-FLowable(二) — 从零搭建自己的FLowable服务 — 搭建流程服务-FLowable的新手指南

一、介绍 纵览Gitee搜索Flowable开源项目,大多都是已开发好的项目,而笔者从零开始搭建属于自己的Flowable引擎,并且是可以拿到生产上使用的。 二、软件架构 Springboot Flowable modeler idm Mysql SrpingBoot version:2.7…

牛客网verilog刷题知识点盘点(75道题的版本)

牛客网verilog刷题知识点盘点(75道题的版本) 还有几个坑没填 任务和函数 1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。 2.任务和函数中可以声明局部变量,如寄存器,时间,整数&…

企业云工如何高效居家协同办公?试试这个方法

近日的疫情反扑让全国各地的防疫压力增加,并且甚至很多地方不知道的啥时候就要被居家隔离,所以在新的防疫背景下,居家就顺理成章地成为一种常态化的学习和工作方式。 现在越来越多公司也将日常业务搬到了线上,以保证疫情期间公司的…

基于ssm的旅游网站的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

vue——路由

目录 一、介绍路由 1、路由是什么 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。 2、为什么要使用路由 3、主要用途 二、安装路由 1、安装命令 2、配置文件 3、在main.js 中进行挂载 三、案例展示 …

Linux服务器配置与管理(基于Centos7.2)任务目标(五)

文章目录一、知识目标二、能力目标二、任务实施任务一:安装Apache任务二:配置简单Web站点任务三:配置基于主机名的虚抛主机任务四:安装vsftpd任务五:匿名用户访问FTP服务器任务六:本地用户配置一、知识目标…

HummerRisk 使用场景-混合云安全治理(2)--阿里云安全最佳实践

背景: 阿里云安全最佳实践,是基于众多客户上云的成功案例萃取而成的最优化企业上云指导。每个最佳实践包括使用场景、多产品部署架构及部署手册。 最佳实践目前覆盖23种常用场景,目前有200篇最佳实践,涉及100款以上阿里云产品的…

20221128-1Spring_day02(资料来自黑马程序)

Spring_day02 今日目标 掌握IOC/DI配置管理第三方bean掌握IOC/DI的注解开发掌握IOC/DI注解管理第三方bean完成Spring与Mybatis及Junit的整合开发 1,IOC/DI配置管理第三方bean 前面所讲的知识点都是基于我们自己写的类,现在如果有需求让我们去管理第三方…

安卓讲课笔记5.11 菜单

文章目录零、本讲学习目标一、导入新课二、新课讲解(一)菜单概述1、选项菜单2、上下文菜单3、子菜单(二)选项菜单案例演示1、创建安卓应用2、准备图片素材3、字符串资源文件4 、主布局资源文件5、主界面类实现功能6、启动应用&…

2. Vue3 Composition API

Composition API 1.Composition API 接下来我们来介绍一下Vue3中新增的Composition API如何使用。注意Composition API仅仅是Vue3中新增的API,我们依然可以使用Options API。先来实现一下之前演示的获取鼠标位置的案例。做这个案例之前,需要先介绍一下…

MybatisPlus简单使用与自定义sql以及通过自定义sql实现多表联查的分页查询

MybatisPlus简单使用与自定义sql以及通过自定义sql实现多表联查的分页查询前言1. mybatis的简单使用2. MybatisPlus 的简单使用2.1 入门2.1.1 简单配置2.1.2 入门例子2.1.3 测试2.2 MybatisPlus自带封装的增删改查2.2.1 傻瓜式使用2.2.2 批量添加数据3 MybatisPlus 动态查询sql…

计算机网络---数据链路层扩展的以太网

(一)在物理层扩展以太网 使用光纤扩展:主机使用光纤和一对光纤调制解调器连接到集线器 使用集线器扩展:主机使用光纤和一对光纤调制解调器连接到集线器 使用集线器扩展的优缺点 优点 :使原来属于不同碰撞域&#xff0…

Nodejs -- Express中间件的概念及基本使用

文章目录1 中间件的概念1.1 什么是中间件1.2 现实生活中的例子1.3 Express中间件的调用流程1.4 Express的中间件的格式1.5 next函数的作用2 Express中间件初体验2.1 定义中间件函数2.2 全局生效的中间件2.3 定义全局中间件的简化形式2.4 中间件的作用2.5 定义多个全局中间件2.6…

机器学习-(手推)线性回归3-正则化-岭回归(Ridge)-频率角度贝叶斯角度

一、正则化-岭回归-频率角度 回顾: Loss Function: 过拟合的解决方法: ①最直接:加数据 ②降维(特征选择/特征提取(PCA)) ③正则化(对参数空间,例如w的约…