express进阶用法如:静态资源中间件,路由中间件的用法等

Express是一个流行的Node.js框架,用于构建web应用程序和API。以下是Express进阶用法的详细介绍:

1.路由

基本路由:Express中的路由通过app.VERB()方法定义,其中VERB是HTTP动词,如get、post等。
例如:

app.get('/users', function(req, res){})

注:匹配对所有发送到’/users’路径的GET请求。
路由参数:可以使用路由参数捕获URL中的变量。
例如:

app.get('/user/:id', function(req, res){});

注释:‘ :id ’ 是一个路由参数,可以通过req.params.id获取其值。
正则表达式路由:Express支持使用正则表达式来定义路由。
例如:

app.get(/^\/page\/\d+$/, function(req, res){});

注释:匹配以’/page/'开头后跟一个或多个数字的路径。

2.中间件

内置中间件:Express提供了一些内置中间件函数,如express.json()express.urlencoded(),用于解析JSONURL编码的数据。
第三方中间件:可以引入第三方中间件,如cookie-parser用于解析Cookie数据。首先安装cookie-parser,然后在应用中引入和使用它。
错误处理中间件:错误处理中间件有四个参数:(err, req, res, next)。它是在正常中间件之后调用的,并且必须放在最后。例如:

app.use(function(err, req, res, next){res.status(500).send('Something broke!') 
});

3.静态资源托管

express.static:使用express.static中间件可以托管静态资源。例如:

app.use(express.static('public'));

代码注释:将所有在’public’目录下的文件作为静态资源服务。
设置前缀:可以为静态资源指定一个基础路径前缀。例如:

app.use('/static', express.static('public'));

代码注释:意味着所有静态资源将通过’/static’路径访问。

4.请求对象(req)

req.query:获取URL查询参数(问号后面的参数)。例如,对于代码

URL'/?username=zhangsan&age=18',req.query

将返回:

{ username: 'zhangsan',age: '18' }

req.body:获取POST请求体参数。
需要使用express.json()express.urlencoded()中间件来解析请求体。
req.params:获取
路由参数

例如,在路由/user/:userId中,req.params将包含{ userId: ‘value’ }。

5.响应对象(res)

res.send:发送各种类型的响应。
例如:res.send(‘Hello World’)将发送一个字符串,而res.send({ key: ‘value’ })将发送一个JSON对象。
res.status:设置HTTP状态码。
例如:res.status(404).send(‘Not Found’)将返回一个404状态码和相应的消息。
res.redirect:重定向到另一个路由。
例如,res.redirect(302, ‘/home’)将客户端重定向到’/home’路径。

6.模板引擎

模板引擎安装密令:npm install ejs --save
使用模板引擎:Express支持使用模板引擎,如Jade和EJS,来生成HTML页面。首先安装并配置模板引擎,然后使用res.render()方法渲染模板。
自定义模板引擎:可以开发自己的模板引擎并将其与Express集成。需要在Express中使用app.engine()方法注册模板引擎,并使用app.set()方法设置模板目录和其他选项。

7.错误处理

基本错误处理:可以使用中间件函数来处理错误。例如:

app.use(function(err, req, res, next){ res.status(500).send('Server Error') 
});

代码注释:会捕获并处理错误,返回500状态码和错误消息。
错误传播:如果一个中间件函数抛出一个错误但未处理,错误会传播到下一个错误处理中间件。如果没有错误处理中间件,则服务器将停止执行并显示错误消息。

9.性能优化

缓存:使用缓存可以减少不必要的计算和数据库查询。
例如,可以使用memory-cache中间件来缓存频繁请求的数据。
压缩:启用HTTP响应压缩可以减少传输数据量,提高网站速度。
使用compression中间件可以自动压缩响应数据。

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

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

相关文章

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十三)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 33 节) P33《32.通知-进度条通知》 下载按钮对应的逻辑: 取消按钮对应的逻辑: 暂停按钮对应的…

吴恩达深度学习笔记1 Neural Networks and Deep Learning

参考视频:(超爽中英!) 2024公认最好的【吴恩达深度学习】教程!附课件代码 Professionalization of Deep Learning_哔哩哔哩_bilibili Neural Networks and Deep Learning 1. 深度学习引言(Introduction to Deep Learning) 2. 神 经 网 络 的 编 程 基 础…

Python机器学习入门:从理论到实践

文章目录 前言一、机器学习是什么?二、机器学习基本流程三、使用Python进行机器学习1.数据读取2.数据规范化3. 数据降维(主成分分析)4. 机器学习模型的选择5. 线性回归模型的实现6. 可视化结果 总结 前言 机器学习是人工智能的一个重要分支&…

排序二叉树(c++)

排序二叉树是一棵有顺序,且没有重复元素的二叉树。 对每个节点而言: 如果左子树不为空,则左子树上的所有节点的权值都小于该节点的权值。 如果右子树不为空,则右子树上的所有节点的权值都大于该节点的权值。 上图为一棵排序二叉…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日派对座位安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

如何为Easybr指纹浏览器配置高效代理IP?IPXProxy步骤指南

​Easybr是一款简单易上手的指纹浏览器,它的操作简便、灵活,比较适合跨境电商卖家日常工作中使用。在运营跨境店铺的时候,我们有时会面临网络连接不畅的情况,这会导致没法及时回复客户的消息,而影响店铺的销售。而为了…

5 C 语言数组与字符串的全面解析

目录 1 数组的概念与特性 1.1 什么是数组 1.2 数组的特点 1.3 数组的用途 2 一维数组的定义与初始化 2.1 一维数组的定义 2.2 声明与定义的区别 2.3 一维数组的多种初始化 3 数组名的命名规则与作用 3.1 数组名的命名规则 3.2 数组名的作用 4 一维数组在内存中的存…

C语言:键盘录入案例

主要使用了scanf; scanf的使用方法和注意事项: 1.作用: 用于接收键盘输入的数据并赋值给对应的变量 2.使用方式; scanf("占位符",&变量名); 3.注意事项; 占位符后面的的变量要对应 第一个参数中不写换行 案例1&#xf…

FeignErrorDecoder使用笔记

自定义ErrorDecoderSlf4j public class FeignErrorDecoder implements ErrorDecoder {Overridepublic Exception decode(String methodKey, Response response) {String message response.reason();try {if (response.body() ! null) {message IOUtils.toString(response.bod…

Codeforces 916 div3 A-F

A 题意分析&#xff1a; 看思考每个题的时间是否大于等于解决该题需要的时间&#xff0c;如果是&#xff0c;则能解决该题&#xff0c;否则不能&#xff0c;直接枚举计数即可 C代码&#xff1a; #include<iostream> using namespace std; int main(){int t,n;cin>&g…

history,hash缓存那些事

vue-router 中的 createWebHistory&#xff0c;createWebHashHistory两种模式 createWebHistory 是基于 window.history 对象是HTML5提供的用于维护当前标签页浏览历史的对象&#xff0c;主要功能是前进后退和在不刷新页面的情况下&#xff0c;修改地址栏里的URL地址。histor…

TCP/IP八连问

目录 1. 基础概念2. 网络层&#xff08;IP协议&#xff09;3. 传输层&#xff08;TCP和UDP&#xff09;4. 应用层5. 网络安全6. 网络故障诊断7. 高级主题8. 问题解决能力 1. 基础概念 问题: 请解释TCP/IP协议是什么&#xff1f; 答案: TCP/IP协议是互联网通信的基础协议&#x…

“微软蓝屏”事件:网络安全问题的深刻暴露

“微软蓝屏”事件&#xff1a;网络安全问题的深刻暴露 前言 在2024年7月19日&#xff0c;全球范围内发生了一起由微软视窗&#xff08;Windows&#xff09;操作系统引发的蓝屏死机&#xff08;Blue Screen of Death, BSOD&#xff09;事件。此次事件不仅影响了数百万台Window…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-04-信息系统架构设计方法-信息化总体架构方法

文章目录 1. 信息化概述1.1 信息化1.2 国家信息化1.3 信息化的内涵1.4 品牌信息化建设1.5 信息化特征1.5.1 易用性1.5.2 健壮性1.5.3 平台化、灵活性、拓展性1.5.4 安全性1.5.5 门户化、整合性1.5.6 移动性 2. 信息化工程建设方法2.1 信息化架构模式2.1.1 数据导向架构2.1.2 流…

Pandas包与Numpy包区别

文章目录 一、设计目的与核心功能二、数据结构三、性能与灵活性四、应用场景 Pandas包与Numpy包在数据处理和分析方面各有特点和优势&#xff0c;它们之间的主要区别可以归纳如下&#xff1a; 一、设计目的与核心功能 Numpy&#xff1a; 设计目的&#xff1a;Numpy是Python的一…

Policy-GNN

Policy-GNN代码解析 一、dqn_agent_pytorch.py二、train_citeseer.py三、train_cora.py四、gcn.py 一、dqn_agent_pytorch.py 这个文件实现了一个基于深度Q学习的智能体DQNAgent。代码使用PyTorch来定义和训练深度神经网络&#xff0c;估计状态-动作值。 主要组成部分包括&am…

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试&#xff0c;从下载项目的源代码开始&#xff0c;通过编译过程&#xff0c;最终将项目部署到目标板卡上运行演示。此外&#xff0c;我们还介绍如何修改板卡的IP地址&#xff0c;以便更好地适应您的网络环境或项目需求。 首先从Gi…

Unity UGUI 之 ScrollBar与ScrollView

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.什么是ScrollBar 滚动块&#xff1a;Unity - Manual: Scrollbar 2.重要参数 该笔记来源…

java用freemarker导出word

freemarker导出word 第一步、将word转换为xml格式第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下&#xff08;可以自己新建一个文件夹放在文件夹中&#xff09;第三步、格式化xml代码&#xff08;如果问价太大可能会无法格式化&#xff09;这时候需要在…

微软CrowdStrike驱动蓝屏以及内核签名

原因 当Windows操作系统遇到严重错误导致系统崩溃时&#xff0c;屏幕显示为蓝色&#xff0c;通常伴有错误代码和信息&#xff0c;这被称为“蓝屏死机”&#xff08;Blue Screen of Death&#xff0c;简称BSOD&#xff09; https://www.thepaper.cn/newsDetail_forward_281262…