一、开始之前
sh
_________________________________________________________________
/ Express 作为最为流行的 Node.js 库,什么时候学习回顾,对自己都会 \
| 有很大的帮助,因为学习实践有一段时间的 Node.js 后端对 Express. |
\ js 做个小总结。 /
-----------------------------------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
二、官方网站
三、快速开始
1)手动安装
sh
npm install express --save # 4.18.2
2)express5 有哪些更改
sh
npm install express@next --save # 5.0.0-beta.2
3)使用脚手架
sh
npx express-generator # 使用脚手架
4)一个简单示例
ts
import express from 'express'
const app = express()
app.get("/", function(req, res, next) {
return res.json({/* you json data*/})
})
app.listen(3000, () => {
console.log("server on > http://localhost:3000")
})
Express.js v5 主要在 API 层面进行 更改,意味着如果你要升级 Express.js 5 那么话,可能程序不能直接运行起来。
四、ExpressJS 基础知识回顾
概念 | 英文 | 描述 |
---|---|---|
中间件 | Middleware | 处理HTTP请求和响应的函数 |
路由 | Routing | 将URL映射到处理函数的定义 |
请求对象 | Request Object | 包含客户端HTTP请求信息的对象 |
响应对象 | Response Object | 用于构建HTTP响应的对象 |
路由参数 | Route Parameters (Route Params) | 从URL中提取的参数,如: id |
视图引擎 | View Engine | 生成动态HTML页面的模板引擎 |
静态文件服务 | Static File Serving | 提供静态文件(CSS、JS、图像) |
会话管理 | Session Management | 跟踪用户状态和身份的中间件 |
错误处理 | Error Handling | 处理应用程序中的错误 |
中间件生命周期 | Middleware Lifecycle | 中间件按顺序执行的规则 |
五、Express 中间件和实用库
1)express 解析器和校验工具
UI 库 说明 cookie-parser 解析 HTTP 请求 Cookie body-parser Node.js 请求体中间件 express-validator "express-validator" 是一组 Express.js 中间件,它包装了由 "validator.js" 提供的广泛的验证器和清理器集合。 joi 最强大的 JavaScript 模式描述语言和数据验证器。 zod 具有静态类型推断的 TypeScript 优先的模式验证。
2)跨域
跨域 说明 cors Node.js 跨域中间件
3)模板引擎
模板引擎 说明 pug Pug - 用于 Node.js 的强大、优雅、功能丰富的模板引擎。 EJS 嵌入式js模板引擎 handlebarsjs 一个简单的模板语言 art-template 高性能的JavaScript模板引擎 express-handlebars 一个用于Express的Handlebars视图引擎,非常出色。 express-hbs Express Handlebars模板引擎,支持继承、部分视图、国际化(i18n)和异步辅助函数。
4)RxJS
RxJS 说明 rxxpress RxJS 和 Express 的实验性组合 rxpressive 当 RxJS 遇到 Express
5)通知相关
通知相关 说明 NodeMailer Nodemailer
是用于Node.js应用程序的模块,使电子邮件发送变得轻松如同做蛋糕一样。nodemailer-express-handlebars 这是一个用于 nodemailer
的插件,它使用express-handlebars
视图引擎来生成电子邮件。
6)安全
安全相关 说明 helmet Helmet通过设置HTTP响应标头来帮助加强Express应用程序的安全性。 csrf-csrf 一个实用的工具包,用于在Express中使用双重提交Cookie模式来实现无状态CSRF保护。
7)数据库和ORM
数据库相关 说明 mongoose 优雅的Node.js下的MongoDB对象建模 node-sqlite3 Node.js的异步、非阻塞SQLite3绑定。 Sequelize 功能丰富的ORM适用于现代Node.js 和TypeScript,支持PostgreSQL(包括JSON和JSONB支持)等多种数据库 mysql2 ⚡ 用于 Node.js 的快速的 mysqljs/mysql 兼容 MySQL 驱动程序 typeORM TypeScript 和 JavaScript 的 ORM。支持 MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle、SAP Hana、WebSQL 数据库。适用于 NodeJS、浏览器、Ionic、Cordova 和 Electron 平台。 Primsa 下一代 Node.js 和 TypeScript 的 ORM PostgreSQL、MySQL、MariaDB、SQL Server、SQLite、MongoDB 和 CockroachDB connect-redis 用于 Connect 的 Redis 会话存储 connect-mongo 用于 Connect 和 Express 的 MongoDB 会话存储,使用 TypeScript 编写。
8)限流
限流 说明 express-rate-limit Express 的基本速率限制中间件。
9)文件上传
文件上传 说明 multer 处理文件上传 express-fileupload 一个简单的 Express 文件上传中间件,封装了 busboy。 graphql-upload 中间件和上传标量,用于向各种 Node.js GraphQL 服务器添加对 GraphQL 多部分请求(通过查询和突变进行文件上传)的支持。
10)日志与调试
日志与调试 说明 morgan Node.js 的 HTTP 请求日志记录中间件 express-winston-middleware Express 的 Winston 日志包装器和中间件。 debug 一个小型的 JavaScript 调试实用工具,模仿了 Node.js 核心的调试技术。适用于 Node.js 和 web 浏览器。
11)授权与认证
授权与认证 说明 passport 简洁、不显眼的Node.js身份验证 express-jwt 连接/Express中间件,用于验证JsonWebToken(JWT)并使用属性设置req.user express-basic-auth 用于Express的即插即用的基本身份验证中间件 jsonwebtoken JSON Web Tokens 的实现
12)webpack 相关
webpack 相关 说明 webpack-hot-middleware Webpack热重载,您可以附加到自己的服务器 http-proxy-middleware ⚡ 适用于 connect、express、next.js 等的一行代码的 Node.js HTTP 代理中间件
13)类型
类型约束 说明 @types/express express 声明文件 @types/node nodejs 声明文件
14)部署
部署 说明 pm2 PM2 是一个守护进程管理器,将帮助您管理并确保您的应用程序全天候在线。
15) 代理
代理 说明 express-http-proxy Express中间件,用于代理请求到另一个主机并将响应传递回原始调用者。
16)静态资源相关
静态资源 说明 serve-static 服务静态文件 express-favicon Express中间件的网站图标(favicon)支持 serve-favicon 网站图标提供中间件
17)文档
文档 说明 swagger-node-express 用于 Node.js 的 Swagger 模块(已废弃) swagger-ui-express 向您的 Express 应用添加中间件,以提供与您的 Swagger 文档绑定的 Swagger UI。这充当了您应用程序内部托管的 API 的实时文档。
18)用户代理
用户代理 说明 express-useragent NodeJS 用户代理中间件
19)cookie 和 session
cookie-session 说明 session Express 的简单会话中间件 cookie-session 简单的基于 Cookie 的会话中间件。
20)环境变量相关
环境变量 说明 dotenv 从 .env 文件加载环境变量,适用于 Node.js 项目 dotenv-expand dotenv 的变量扩展。扩展已存在于您的计算机上的变量,以便在您的 .env 文件中使用 cross-env 在各种平台上运行设置和使用环境变量的脚本
21)websocket
websocket 相关 说明 socket.io 实时应用程序框架(Node.js 服务器) ws 简单易用、极速且经过充分测试的 Node.js WebSocket 客户端和服务器
22)缓存压缩
缓存压缩 说明 express-cache-controller 用于在应用程序内部管理缓存控制标头的简单轻量级模块。 compression Node.js 压缩中间件 sharp 高性能的 Node.js 图像处理,是最快的模块,用于调整大小 JPEG、PNG、WebP、AVIF 和 TIFF 图像。使用 libvips 库。
23)队列
队列 说明 bull 用于处理分布式作业和消息的高级队列包,适用于 Node.js。
24)测试
测试和工具 说明 supertest 🕷 使用流畅API测试Node.js HTTP服务器的Super-agent驱动库。 mocha ☕️ 简单、灵活、有趣的JavaScript测试框架,适用于Node.js和浏览器。 chai Chai 是一个适用于 Node 和浏览器的 BDD / TDD 断言库,可以轻松与任何 JavaScript 测试框架搭配使用。 jest Jest 是一个令人愉悦的 JavaScript 测试框架,注重简单性。 vitest 一种基于Vite的本地单元测试框架。它速度快! cypress 使用Cypress,您可以轻松创建现代Web应用的测试,通过可视方式进行调试,并在持续集成构建中自动运行它们。
25)国际化
国际化 说明 i18n-express 一个简单的国际化Express中间件 i18next-http-middleware i18next-http-middleware 是一个可用于Node.js Web框架(如express或Fastify)以及Deno的中间件。
26)api 范式
api 类型 说明 express-graphql express-graphql 模块提供了一种简单的方式来创建一个运行GraphQL API的Express服务器。 apollo-server 🌍 符合规范且适用于生产环境的JavaScript GraphQL服务器,让您可以以模式为先的方式进行开发。适用于Express、Connect、Hapi、Koa等。
27) 加密与解密
加密解密 说明 crypto nodejs 内置了 crypto crypto-js JavaScript密码标准库。 bcrypt Node.js 的 bcrypt
28)sse
sse 说明 express-sse 用于快速且简便的服务器发送事件(Server-Sent Events)的Express中间件。
29)typescript 模板
ts 模板 说明 express-typescript-boilerplate 通过 @w3tecch 创造一种愉悦的方式来使用Node.js和TypeScript构建RESTful API typescript-express-starter 📘 快速简便的TypeScript Express入门套件 express-typescript 用于Web / API应用的 Express + TypeScript + 样板(Boilerplate
30)超时
超时 说明 timeout 用于Connect/Express的请求超时中间件
31)网关
网管 说明 express-gateway 基于Express.js构建的微服务API网关 api-gateway 使用Express.js的简单API网关
32)rpc
rpc 说明 connect-express 针对Protobuf和TypeScript的Connect、gRPC和gRPC-Web支持。 tsrpc 一种TypeScript RPC框架,具有运行时类型检查和序列化支持,同时支持HTTP和WebSocket。非常适用于网站/应用程序/游戏,并且非常适合全栈TypeScript开发人员使用。 grpc 高性能、开源的通用RPC框架 trpc 🧙♀️ 快速迭代而不出错。轻松创建端到端类型安全的API
33)技术栈
ts
- MongoDB --- 文档型数据库
- Express(.js) --- Node.js web 框架
- React(.js) ---客户端 JS web 框架
- Node(.js) --- 首选的JavaScript Web服务器
ts
- MongoDB --- document database
- Express(.js) --- Node.js web framework
- Angular(.js) --- a client-side JavaScript framework
- Node(.js) --- the premier JavaScript web server
34)Express 微服务
微服务 说明 microservices-architectured-app
六、上层抽象和知名项目
上层抽象 说明 @nestjs/platform-express 基于 express 的nestjs底层适配 @fastify/express Fastify 的 Express 兼容层 sails Node.js 的实时MVC框架 keystonejs 最强大的无界面CMS(内容管理系统)用于Node.js --- 基于GraphQL和React构建
七、优质教程
上层抽象 说明 nodebestpractices Node.js 最佳实践清单 ruanyifeng express 阮老师的 express 教程
八、社区模板
上层抽象 说明 node-express-boilerplate 个用于使用Node.js、Express和Mongoose构建生产就绪的RESTful API的样板(boilerplate) Express-Starter "🚚 一个用于Node.js、Express、Mongoose、Heroku、Atlas、Nodemon、PM2和Babel的样板(boilerplate)" nodejs-backend-architecture-typescript Node.js 后端架构 TypeScript - 学习构建一个像Medium和FreeCodeCamp这样的生产就绪博客平台的后端服务器。 express-rest-boilerplate ⌛️ 用于构建RESTful API的Express入门套件
九、express 底层技术
express 本身更多是完成路由相关功能,
包名 | 版本 | 说明 |
---|---|---|
accepts | ~1.3.8 | HTTP内容协商库 |
array-flatten | 1.1.1 | 数组扁平化工具 |
body-parser | 1.20.2 | 解析请求体的中间件 |
content-disposition | 0.5.4 | 处理Content-Disposition头的库 |
content-type | ~1.0.4 | 处理HTTP Content-Type头的库 |
cookie | 0.5.0 | HTTP cookie的库 |
cookie-signature | 1.0.6 | 用于签署和验证Cookie的库 |
debug | 2.6.9 | 调试工具库 |
depd | 2.0.0 | 轻量级的错误处理库 |
encodeurl | ~1.0.2 | URL编码工具 |
escape-html | ~1.0.3 | HTML转义工具 |
etag | ~1.8.1 | HTTP ETag生成和验证库 |
finalhandler | 1.2.0 | 处理HTTP请求的最终中间件 |
fresh | 0.5.2 | HTTP缓存控制工具 |
http-errors | 2.0.0 | 创建HTTP错误的工具库 |
merge-descriptors | 1.0.1 | 合并对象描述符的库 |
methods | ~1.1.2 | HTTP请求方法集合的库 |
on-finished | 2.4.1 | HTTP响应完成事件处理库 |
parseurl | ~1.3.3 | 解析URL的库 |
path-to-regexp | 0.1.7 | 路由路径到正则表达式的转换工具 |
proxy-addr | ~2.0.7 | 处理代理IP地址的中间件 |
qs | 6.11.0 | 解析和序列化查询字符串的库 |
range-parser | ~1.2.1 | HTTP Range头解析工具 |
safe-buffer | 5.2.1 | 安全的缓冲区实用程序 |
send | 0.18.0 | 发送文件或数据的库 |
serve-static | 1.15.0 | 提供静态文件的中间件 |
setprototypeof | 1.2.0 | 设置对象的原型链的库 |
statuses | 2.0.1 | HTTP状态码的库 |
type-is | ~1.6.18 | 判断请求的Content-Type的库 |
utils-merge | 1.0.1 | 合并对象属性的库 |
vary | ~1.1.2 | HTTP Vary头处理工具 |
小结
本文主要探索了 Express 生态中内容,包含了不同业务类型的中间件包含:静态资源、压缩、超时、授权认证、cookie 和 session 等等。同时提供了不同的社区模板(包含 TypeScript), express5 版本进入了 beta 版本中,也可以进行尝试。