2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)

Express 框架概述

Express 是一个基于 Node.js 平台的快速、开放、极简的Web开发框架。它本身仅仅提供了 web 开发的基础功能,但是通过中间件的方式集成了外部插件来处理HTTP请求,例如 body-parser 用于解析 HTTP 请求体,compression 用于压缩 HTTP 响应,cookie-parse 用于解析 cookie 数据,cors 用于处理跨域资源请求,Morgan 用于 http 请求日志。这使得 Express 本身变得更加灵活和简单。

Express 官方网站:https://expressjs.com/

在这里插入图片描述

下载安装 Express 框架模块包

npm install express

Express 初体验案例

const express = require('express')
const app = express()app.get('/', function (req, res) {res.send('Hello World')
})app.listen({port: 3000, hostname: '127.0.0.1'}, () => {console.log('http://127.0.0.1:3000/')
})

获取 request 请求数据

app.get('/index', function (req, res) {console.log(req.method)console.log(req.url)console.log(req.httpVersion)console.log(req.headers)console.log(req.path)console.log(req.query)console.log(req.ip)console.log(req.params)
})

response 响应配置

Node.Js 原生响应 response

app.get("/response", (req, res) => {res.statusCode = 200;res.statusMessage = 'love'res.setHeader('xxx', 'yyy')res.write('hello express')res.end('response')
})

Express 响应 response

app.get("/response", (req, res) => {res.status(200);res.set('aaa', 'bbb')res.send('hello Express')
})

配置路由参数

app.get("/data/:id", (req, res) => {console.log(req.params.id)
})

重定向 redirect

app.get("/redirect", (req, res) => {res.redirect("http://www.baidu.com/")
})

下载服务器资源 download

app.get("/download", (req, res) => {res.download(__dirname + "/test.mp4")
})

响应 Json 格式数据

app.get("/json", (req, res) => {res.json({name: 'helloworld', password: "helloworld"})
})

测试结果

在这里插入图片描述

Express 中间件

在 Express 中, 使用 app.use 或者 app.METHOD 注册的中间件叫做应用级中间件。

全局中间件:给每个路由规则都添加中间件处理函数

app.use(function (req, res, next) {console.log('我是一个全局中间件, 影响所有的路由规则')
})

局部中间件:给某一个特定的路由规则添加中间件处理函数

app.use('/users', function (req, res, next) {console.log(`这里是一个局部中间件, 只影响/users路由`)next()
})

路由中间件

express.Router()对象也可以注册中间件。使用 router.use 或者 router.METHOD 注册的中间件叫做路由级中间件。

var app = express()
var router = express.Router()router.use(function (req, res, next) {console.log('Time:', Date.now())next()
})
router.get('/users/', function(req, res) {res.send('hello')
})

静态资源中间件

如果要在网页中加载静态文件(比如样式表、图片等)就需要另外指定一个存放静态文件的目录。注意 index.html 文件是默认打开的资源。如果静态资源与路由规则同时匹配,谁先匹配谁就响应。路由响应动态资源,静态资源中间件响应静态资源。

app.use(express.static(__dirname + '/public'))

获取请求体数据

解析 querystring 请求体数据

const bodyparser = require('body-parser')
app.use(bodyparser.urlencoded({ extended: true }))
app.post("/post", (req, res) => {console.log(req.body)
})

解析 json 请求体数据

const bodyparser = require('body-parser')
app.use(bodyparser.json())
app.post("/post", (req, res) => {console.log(req.body)
})
{ username: '123', password: '123' }

Express.Router

Express 4.0 路由器功能成了一个单独的组件Express.Router。它好像小型的 express 应用程序一样,有自己的use、get、param 和 route 方法。

首先,Express.Router 是一个构造函数,调用后返回一个路由器实例。然后,使用该实例的HTTP动词方法,为不同的访问路径,指定回调函数;最后,挂载到某个路径。

var router = express.Router();router.get('/', function(req, res) {res.send('首页');
});router.get('/about', function(req, res) {res.send('关于');
});app.use('/', router);

定义了两个访问路径,然后将它们挂载到根目录。如果最后一行改为app.use(‘/app’, router),则相当于为/app和/app/about这两个路径,指定了回调函数。这种路由器可以自由挂载的做法,为程序带来了更大的灵活性,既可以定义多个路由器实例,也可以为将同一个路由器实例挂载到多个路径。

app.route 实例

假定 app 是 Express 的实例对象,Express 4.0为该对象提供了一个route属性。app.route 实际上是 express.Router() 的缩写形式,除了直接挂载到根路径。因此对同一个路径指定 get 和 post 方法的回调函数,能写成链式形式。

app.route('/login').get(function(req, res) {res.send('this is the login form');}).post(function(req, res) {console.log('processing');res.send('processing the login form!');});

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

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

相关文章

@ControllerAdvice + @ExceptionHandler 定义全局异常

创建Spring Boot项目&#xff1a;使用Spring Initializr创建一个新的Spring Boot项目。依赖配置&#xff1a;在pom.xml 文件中(方便起见使用的是thymeleaf模板引擎)&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId&…

【Unity之UI编程】在Unity中如何打图集,来降低DrowCall

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

C++常用格式化输出转换

在C语言中可以用printf以一定的格式打印字符&#xff0c;C当然也可以。 输入输出及命名空间还不太了解的小伙伴可以看一看C入门讲解第一篇。  在C中&#xff0c;可以用流操作符&#xff08;stream manipulators&#xff09;控制数据的输出格式&#xff0c;这些流操作符定义在2…

用循环结构程序自动化计算——计数循环

用循环结构程序自动化计算——计数循环 低阶目标&#xff1a; 利用for循环结构来完成已知次数的自动化处理&#xff0c;掌握计数循环结构应用方法 高阶目标&#xff1a; 学会利用for循环解决生活中的实际问题 用循环结构程序自动化计算——计数循环 用循环结构程序自动化计算…

缓存-Spring Cache 缓存抽象

缓存-Spring Cache 缓存抽象 Spring从版本3.1开始提供非侵入的将Cache集成到Spring应用的方式。Spring Cache提供Cache的统一抽象&#xff0c;支持集成各种不同的缓存解决方案。从4.1版本开始&#xff0c;提供了注解和更多的定制参数。 Spring Cache 抽象提供了对Java方法的缓存…

yo!这里是STL::unordered系列简单模拟实现

目录 前言 相关概念介绍 哈希概念 哈希冲突与哈希函数 闭散列 框架 核心函数 开散列 框架 核心函数 哈希表&#xff08;开散列&#xff09;的修改 迭代器实现 细节修改 unordered系列封装 后记 前言 我们之前了解过map和set知道&#xff0c;map、set的底层结构是…

电脑软件:推荐一款电脑多屏幕管理工具DisplayFusion

下载https://download.csdn.net/download/mo3408/88514558 一、软件简介 DisplayFusion是一款多屏幕管理工具&#xff0c;它可以让用户更轻松地管理连接到同一台计算机上的多个显示器。 二、软件功能 2.1 多个任务栏 通过在每个显示器上显示任务栏&#xff0c;让您的窗口管理更…

MATLAB绘图中文显示为方框

MATLAB绘图中文显示为方框 MATLAB显示英文和字母没有问题&#xff0c;但是当显示中文时会显示乱码&#xff0c;中文显示为方框&#xff0c;如下图&#xff1a; 可以在绘图命令中添加如下代码&#xff1a; set(gca,Fontname,Monospaced); 例如&#xff1a; % 滤波器系数%低通…

16 DNS协议详解

1、DNS的由来 很难记住网站的 IP 地址&#xff0c;因而也需要一个地 址簿&#xff0c;就是DNS 服务器。DNS 在日常生活中非常重要。每个人上网&#xff0c;都需要访问它&#xff0c;因此一旦DNS出现故障&#xff0c;是非常可怕的。因而&#xff0c;DNS 服务器&#xff0c;一定…

装修服务预约小程序的内容如何

大小装修不断&#xff0c;市场中大小品牌也比较多&#xff0c;对需求客户来说&#xff0c;可以线下咨询也可以线上寻找品牌&#xff0c;总是可以找到满意的服务公司&#xff0c;而对装修公司来说如今线下流量匮乏&#xff0c;很多东西也难以通过线下方式承载&#xff0c;更需要…

【Java 进阶篇】Java Filter 快速入门

欢迎来到这篇有关 Java Filter 的快速入门指南&#xff01;如果你是一名 Java 开发者或者正在学习 Java Web 开发&#xff0c;Filter 是一个强大的工具&#xff0c;可以帮助你管理和控制 Web 应用程序中的请求和响应。本文将向你解释 Filter 的基本概念&#xff0c;如何创建和配…

84 柱状图中的最大的矩形(单调栈)

题目 柱状图中的最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 …

nginx图片资源管理转发

目标: 服务器上面 /home/images 里面作为文件资源管理器 代码: server {listen 80;server_name hello.world.cn;#apple-app和接口的关联文件location ~.*(images/miniapp)*\.(gif|jpg|jpeg|png)$ {root /home/;try_files $uri $uri/ 404;add_header Cache-Control &q…

(六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题

前言 本节内容是关于使用分布式锁解决并发访问“超卖”问题的最终篇&#xff0c;在前面的章节中我们介绍了使用mysql的行锁、乐观锁、悲观锁解决并发访问导致的超卖问题&#xff0c;存在的问题是行锁、乐观锁、悲观锁不太灵活&#xff0c;需要和具体的业务耦合到一起&#xff…

再获5G RedCap能力认证!宏电5G RedCap工业智能网关通过中国联通5G物联网OPENLAB开放实验室测试验证

​近日&#xff0c;中国联通5G物联网OPENLAB开放实验室携手宏电股份完成5G RedCap工业智能网关端到端的测试验证&#xff0c;并颁发OPENLAB实验室面向RedCap终端的认证证书&#xff0c;为RedCap产业规模推广、全行业赋能打下坚实基础。 中国联通5G物联网OPENLAB开放实验室是中国…

掌动智能:云可观测性的主要特点及应用场景

云全景可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能…

kubernetes集群编排(8)

k8s资源监控 资源限制 上传镜像 [rootk8s2 limit]# vim limit.yaml apiVersion: v1 kind: Pod metadata:name: memory-demo spec:containers:- name: memory-demoimage: stressargs:- --vm- "1"- --vm-bytes- 200Mresources:requests:memory: 50Milimits:memory: 100…

04-react基础知识-路由

一、react路由环境安装 使用指令&#xff1a;npm i --save react-router-dom type/react-router-dom进行react路由环境安装 二、引入路由 在main.jsx文件中引入该语句&#xff1a; import { createBrowserRouter, RouterProvider } from react-router-dom 定义一个变量rou…

【Java笔试强训】Day9(CM72 另类加法、HJ91 走方格的方案数)

CM72 另类加法 链接&#xff1a;另类加法 题目&#xff1a; 给定两个int A和B。编写一个函数返回AB的值&#xff0c;但不得使用或其他算数运算符。 题目分析&#xff1a; 代码实现&#xff1a; package Day9;public class Day9_1 {public int addAB(int A, int B) {// wr…

「Verilog学习笔记」使用子模块实现三输入数的大小比较

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 题目要求编写子模块实现两个输入数的大小比较并输出较小值&#xff0c;可以使用if-else语句实现。同时要求在主模块中实现三个输入数值的大小比较&#xff0c;假设三个…