2023 年 Expressjs 生态探索

一、开始之前

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 版本中,也可以进行尝试。

相关推荐
天天摸鱼的java工程师几秒前
从零到百万并发:Java高并发核心编程揭秘,这些坑你踩过几个?
java·后端
写bug写bug2 分钟前
Java并发编程:线程安全
java·后端
落尘2982 分钟前
Spring IoC 依赖注入的三种方式
后端
我是哪吒3 分钟前
分布式微服务系统架构第124集:架构
后端·面试·github
Lx3524 分钟前
💥 灰度发布翻车现场:一次错误配置引发的千万级损失
后端
s9123601015 分钟前
Rust std::thread::spawn(move) 的作用
开发语言·后端·rust
是店小二呀6 分钟前
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
后端
汤面不加鱼丸6 分钟前
flutter实践:比例对比线图实现
前端·flutter
Victor3567 分钟前
Dubbo(86)如何设计一个多租户的Dubbo服务?
后端
天天摸鱼的java工程师8 分钟前
爆肝 30 天!从 JVM 调优到百万级 QPS,我的 Java 性能飞升全记录
java·后端