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.rhkb.cn/news/186831.html

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

相关文章

软件测试/测试开发丨接口测试学习笔记,TcpDump与WireShark

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27859 协议分析工具 网络监听:TcpDump WireShark 代理 Proxy 推荐工具:手工测试charles [全平台]、安全测试burpsuite [全平台 j…

网络安全自学手册

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

QT QSplitter

分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似,可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。 比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不…

如何在Visual Studio上创建项目并运行【超级详细】

工欲善其事,必先利其器。想要学好编程,首先要把手中的工具利用好,今天小编教一下大家如何在史上最强大的编译器--Visual Studio上创建项目。🍗 一.打开编译器🍗 双击你电脑上的vs,(2012,2019,2022)都行。&…

视频批量剪辑:AI智剪入门,轻松掌握智能剪辑技巧

在数字媒体时代,视频剪辑已经成为一项必备的技能。无论是为了工作需要,还是为了在社交媒体上分享生活,掌握视频剪辑技巧都能为我们的生活和工作带来很多便利。然而,对于初学者来说,视频剪辑可能是一项艰巨的任务。现在…

03【远程协作开发、TortoiseGit、IDEA绑定Git插件的使用】

上一篇:02【Git分支的使用、Git回退、还原】 下一篇:【已完结】 目录:【Git系列教程-目录大纲】 文章目录 一、远程协作开发1.1 远程仓库简介1.1.1 Github1.1.2 Gitee1.1.3 其他托管平台 1.2 发布远程仓库1.2.1 创建项目1) 新…

2023/11/10 JAVA学习

取文件夹本身大小 打开文件 文件改名案例 输出流,文件依照你起的文件名自动创建 哪个流后创建,哪个流先关闭 虚拟机退出跑不了 finally别返回值

金蝶云星空表单插件实现父窗体打开子窗体,并携带参数到子窗体

文章目录 金蝶云星空表单插件实现父窗体打开子窗体,并携带参数到子窗体父窗体打开子窗体准备设置携带参数打开子窗体子窗体接收参数 金蝶云星空表单插件实现父窗体打开子窗体,并携带参数到子窗体 父窗体打开子窗体准备 BillShowParameter OtherInAdd n…

外贸企业GMS认证|SD-WAN专线解决方案支持 IPv6、IPv4

IP地址是英文internet protocol的缩写,是网络之间互连的协议。互联网诞生后,很长一段时间都是使用v4版本的IP协议,也就是 IPv4 ,目前全球使用互联网的人数达到了48.8亿,而IPv4的地址库总共约43亿个地址,每个…

blender动画制作软件拓扑全流程

拓扑在三维动画制作中至关重要,原因如下: 1. 动画变形: 自然形变: 良好的拓扑结构能够支持角色或物体在动画中的自然形变,例如关节弯曲、肌肉收缩等。流畅运动: 适当的拓扑有助于保持模型表面的平滑性&…

KiB、MiB与KB、MB的区别

KiB、MiB与KB、MB的区别

排序算法的空间复杂度和时间复杂度

一、排序算法的时间复杂度和空间复杂度 排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 冒泡排序 O(n) O(n) O(n) O(1) 稳定 直接选择排序 O(n) O(n) O(n) O(1) 不稳定 直接插入排序 O(n) O(n) O(n) O(1) 稳定 快速排序 O(n…

如何在Jetpack Compose中显示PDF?

当读取和显示 PDF 的组件缺失时该怎么办? 声明式编程可以拯救你. Jetpack Compose已经存在好几年了, 但_在某些方面它的使用仍然面临挑战_. 例如, 缺少用于查看PDF的官方组件, 而为数不多的第三方库通常也是有代价的. 在我们的应用中, 我们会遇到在许多场景中显示 PDF 的需求…

Windows安装Docker(无网)

Windows安装Docker(无网) window无网安装Docker 1. 开启虚拟化功能 1. 开启window的虚拟化功能 方式一:直接在window的搜索框搜索 “启用或关闭windows功能”,就可以快捷进入【启用或关闭windows功能】页面 方式二&#xff1…

Word脚注如何插入?1分钟学会!

“最近在写一些文章,引用了一些注释,想为它们增添一些脚注。有没有朋友知道在word里脚注怎么添加呀?” 使用word编写文章时,添加脚注是一项常见的任务,用于引用文献、添加注释或提供额外信息。但可能很多朋友不知道wor…

Mybatis(四)

9. MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapp…

相机标定:理论与实践

先讨论相机模型,说明投影关系的描述,介绍相机的内外参,最后完成标定。 一、内参含义 把需要标定的相机参数叫做内参(intrinsics matrix),它决定了物体的实际位置Q在成像平面上的投影位置q,如下…

基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. RGB与HSV色彩空间 4.2. RGB到HSV转换原理 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到matlab中: 2.算法运行软件版本 vivado2019.2 matlab2022a …

java正则表达式(Pattern类和Matcher类)

文章目录 前言一、Java中使用正则表达式①捕获组②Pattern类与Matcher类Pattern类:Matcher类:Pattern类&Matcher类方法:Pattern类调用方法(静态方法):1、public static Pattern compile(String regex)2、public st…