Express学习(二)

Express路由

路由的概念

现实生活中的 路由:例如我们在拨打10086的时候,会让我们按指定的按键选择对应的服务,这里的路由就是按键和服务之间的映射关系。

  • Express中的路由
    在Express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
    Express中的路由分三部分组成,分别是请求的类型、请求的URL地址、处理函数,格式如下:
    app.METHOD(PATH, HANDLER)
    例子:
//匹配GET请求,这里的get就是请求的类型,且请求URL为/
app.get('/', function(req, res) {
res.send('Hello Word!')
})
//匹配POST请求,且请求URL为/
app.post('/', function(req, res) {
res.send('Got a POST request!')
})
  • 路由的匹配过程
    每当 一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。
    在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求URL同时匹配成功,则Express会将这次请求转交给对应的function函数进行处理。
    注意点:按照定义的先后顺序进行匹配
    请求的URL类型和请求的URL同时匹配成功,才会调用对应的处理函数。

路由的使用

  • 最简单的用法
    在Express中使用路由最简单的方式就是把路由挂载到app上,但这种不常用,因为挂载路由过多,文件体积太大,示例代码如下:
const express = require('express')
//创建web服务器命名为app
const app = express()

//挂载路由
app.get('/', (req, res) => { res.send('Hello World.') })
app.post('/', (req, res) => { res.send('Post request.') })

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

如下是get请求在这里插入图片描述

  • 模块化路由
    为了方便对路由进行模块化管理,Express不建议将路由直接挂载到app上,而是推荐将路由抽离为单独的模块。将路由抽离为单独模块的步骤如下:
    • 创建路由模块对应的.js文件
    • 调用express.Router()函数创建路由对象
    • 向路由 对象上挂载具体的路由
    • 使用 module.exports向外共享路由对象
    • 使用app.use()函数注册路由模块
  • 创建路由模块
var express = require('express')  //导入express
var router = express.Router()   //创建路由对象

router.get('/user/list', function (req, res) {  //挂载获取用户列表的路由
res.send('Get user list.')
})

router.post('/user/add', function (req, res) {  //挂载添加用户的路由
res.send('Add new user.')
})

module.exports = router   //向外导出路由对象
  • 注册路由模块
//导入路由 模块
const userRouter = require('./router/user.js')

//使用app.use()注册路由模块
app.use(userRouter)

注:app.use()方法简单介绍,后面有章节会详细介绍该方法,这里只是简单了解
app.use() 是 Express 框架中用于添加中间件的一个方法。它可以用于为指定的路径添加中间件功能,当请求的路径与定义的路由相匹配时,相应的中间件就会被执行。

  • 以下是 app.use() 的具体用法:
    • 基本用法:app.use(path, callback),其中 path 是一个字符串、数组或正则表达式,用于定义中间件应用的路径;callback 是当请求匹配到该路径时执行的函数或路由处理对象。
    • 中间件链:可以在一个应用中连续使用多个 app.use(),形成一个中间件链。请求会依次经过这些中间件,每个中间件可以处理特定的任务,如解析请求体、验证用户身份等。
    • 全局中间件:如果不提供路径,app.use() 添加的中间件将被视为全局中间件,适用于所有路由。
    • 内置中间件:Express 提供了一些内置的中间件函数,如 express.json() 用于解析 JSON 格式的请求体。
    • 第三方中间件:也可以使用第三方中间件,如 body-parser、cors 等,通常使用 app.use() 来引入并使用这些中间件。
    • 错误处理中间件:app.use() 还可以用于添加错误处理中间件,这类中间件需要接收四个参数(err, req, res, next),以便在发生错误时进行处理。
    • 别名:app.use() 实际上不仅是 app.get(), app.post(), app.all() 等路由方法的底层实现,它们都可以看作是 app.use() 的别名,因为它们本质上都是在指定路径上添加中间件。
    • 综上所述,app.use() 是 Express 中非常核心的一个概念,它允许开发者灵活地为 HTTP 请求添加各种处理逻辑,从而实现复杂的 Web 应用功能。在使用 app.use() 时,需要注意中间件的执行顺序和作用范围,以确保应用的正确性和安全性。
  • 为路由模块添加前缀
    类似于托管静态资源时,为静态资源统一挂载访问前缀一样,路由模块添加前缀的方式也很简单:
    添加前:app.use(router)
    添加后:app.use(‘/api’, router)
    添加后这个路由模块的每个路由在访问的时候前面都需要加上该前缀
  • 模块化路由示例
    首先我们在目录下有这样的两个js文件,里面有相应的代码,然后运行服务器
    在这里插入图片描述
    打开相应网址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于STC系列单片机实现PNP型三极管S8550驱动共阳数码管或NPN型三极管S8050驱动共阴数码管功能

Digitron.c #include "Digitron.h" //#include "Key.h" #define uchar unsigned char//自定义无符号字符型为uchar #define uint unsigned int//自定义无符号整数型为uint //uchar code DigitronBitCodeArray[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x…

AOP理解

AOP就是面向特定的方法进行编程,在不改动原始方法的基础上,可以增强原始方法的功能,或者改变某些功能,我们可以通过AOP记录数据库的操作日志 AOP的底层实现就是动态代理技术,在执行原始方法前,生成一个代理…

【Linux】开始使用gdb吧!

开始使用gdb吧! 1 下载安装2 开始使用3 实践运用补充一下 print 的 功能 (类似监视窗口的作用)和显示堆栈的功能Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!&am…

JavaScript基础4之原型的原型继承、原型链和理解对象的数据属性、访问器属性

JavaScript基础 原型原型继承问题解决 原型链isPrototypeOf()Object.getPrototypeOf() 理解对象数据属性访问器属性 原型 原型继承 继承是面向对象编程的另一个特征,通过继承进一步提升代码封装的程度,JavaScript中大多是借助原型对象实现继承的特性。…

计算机基础专升本笔记十四-计算机网络基础(一)

计算机基础专升本笔记十四-计算机网络基础(一) 一、计算机网络的发展历程 第一代计算机网络(数据通信) 以数据通信为主的第一代计算机网络。主要是指美国军方用于防控系统的一种联机系统。它只是计算机网络的雏形。 第二代计算…

2022年浙江省职业院校技能大赛信息安全管理与评估 理论题答案

培训、环境、资料 公众号:Geek极安云科 网络安全群:775454947极安云科专注于技能提升,赋能 2024年广东省高校的技能提升,在培训中我们的应急响应环境 成功押题成功,知识点、考点、内容完美还原大赛赛题环境&#xff0c…

比肩Gen-2,全新开源文生视频模型

著名开源平台Stability.ai在官网宣布,推出全新文生视频的扩散模型Stable Video Diffusion,已开源了该项目并公布了论文。 据悉,用户通过文本或图像就能生成高精准,14帧和25帧的短视频。目前,Stable Video Diffusion处…

Vue+SpringBoot打造校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

基于YOLOv5的驾驶员疲劳驾驶行为​​​​​​​检测系统

💡💡💡本文主要内容:详细介绍了疲劳驾驶行为检测整个过程,从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8优化创新,轻松涨点和模型轻量…

一次简单操作代替所有异常处理

一、背景 在服务端处理前端发过来的响应的时候,开发者不可能穷尽用户的所有奇怪的操作。除此之外,我们还需要应付前端人员对我们的无情吐槽,你对XXXX请求返回的为啥是奇怪的响应数据呢?于是全局异常处理应运而生,一次处…

高级控件

1.下拉列表 package com.tiger.chapter08;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner;public class Spi…

tomcat搭建个人博客 实现动静分离

jar包相关 .war:WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar:EJB类文件的打包压缩类zip格式文件,,包括很多的class文件, 网景公司发明 .rar:资源适配器类打包文件,目前已不常…

Pytorch学习 day06(torchvision中的datasets、dataloader)

torchvision的datasets 使用torchvision提供的数据集API,比较方便,如果在pycharm中下载很慢,可以URL链接到迅雷中进行下载(有些URL链接在源码里)代码如下: import torchvision # 导入 torchvision 库 # …

RISC-V架构学习资料整理

1、韦东山——D1S哪吒开发板的裸机代码仓库 https://github.com/bigmagic123/d1-nezha-baremeta 2、melis系统移植到D1S https://blog.51cto.com/u_13800193/6268813 3、韦东山的gitee仓库 https://gitee.com/weidongshan 4、D1S编译工具链下载 https://github.com/Tina-Linux/…

第18课:让客户看了就满意的商业软文是如何练成的?

选品上的注意事项 结合影视热点 通过追影视热点,找出能够跟产品贴合的点。在前面先道出痛点,痛点越深刻,用户对产品的过度才会更自然。 用户体验 真实体验才能真正写得出来。 结合时事热点 用的少,赶上了用就会效果很好&#xf…

2024内衣洗衣机测评推荐:希亦、小吉、鲸立综合对比哪个牌子好?

对于那些追求品质生活、分类洗涤的用户而言,小型洗衣机可以满足我们对不同类型衣物分开洗涤的需求,例如将内衣、袜子等小件衣物与外套等分开洗涤,以保持衣物的清洁和卫生。并且如果您家中有宝宝,或者您对个人卫生和健康有较高要求…

Latex公式太长换行标号

Latex中公式太长换行,且编号,可以采用align,不编号行公式用\nonumber,示例如下: \begin{align}\nonumber %第1行公式不编号&a+b+a+b+a+b+a+b+a+b+a+b+a+b+a\\&+c+d=m %第2行公式编号 \end{align}效果如下 原文件链接 公式不同命令的区别 \begin{align} 与 \…

火柴排队(逆序对 + 离散化)

505. 火柴排队 原题链接 思路 如下是画图分析的一些过程 在这里贪心的思路是排序,然后两个数组都是从小到大那样对应的话最终的答案可达到最小 而我们只能交换相邻的火柴,故在这里先假设一个简化版本,即A有序,而只需要对B进行…

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先,ChatGPT是一种基于人工智能技术的计算机程序,通过机器学习和自然语言处理等技术,从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作,能够迅速处理和检索信息&a…

MySQL为什么要用B+树?

二叉树(二叉查找树) 平衡二叉树(B树就是B-树)(解决了二叉查找树的极端情况) Q:具体是怎么解决的呢? A: 树左右两边层数相差不大于1一旦符合条件1的时候,就进行左旋/右…