2023 年 Expressjs 生态探索

6,285 阅读10分钟

一、开始之前

 _________________________________________________________________
/ Express 作为最为流行的 Node.js 库,什么时候学习回顾,对自己都会 \
| 有很大的帮助,因为学习实践有一段时间的 Node.js 后端对 Express.  |
\ js 做个小总结。                                               /
 -----------------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

二、官方网站

三、快速开始

1)手动安装

npm install express --save # 4.18.2

2)express5 有哪些更改

npm install express@next --save # 5.0.0-beta.2

3)使用脚手架

npx express-generator # 使用脚手架

4)一个简单示例

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-parserNode.js 请求体中间件
express-validator"express-validator" 是一组 Express.js 中间件,它包装了由 "validator.js" 提供的广泛的验证器和清理器集合。
joi最强大的 JavaScript 模式描述语言和数据验证器。
zod具有静态类型推断的 TypeScript 优先的模式验证。

2)跨域

跨域说明
corsNode.js 跨域中间件

3)模板引擎

模板引擎说明
pugPug - 用于 Node.js 的强大、优雅、功能丰富的模板引擎。
EJS嵌入式js模板引擎
handlebarsjs一个简单的模板语言
art-template高性能的JavaScript模板引擎
express-handlebars一个用于Express的Handlebars视图引擎,非常出色。
express-hbsExpress Handlebars模板引擎,支持继承、部分视图、国际化(i18n)和异步辅助函数。

4)RxJS

RxJS说明
rxxpressRxJS 和 Express 的实验性组合
rxpressive当 RxJS 遇到 Express

5)通知相关

通知相关说明
NodeMailerNodemailer 是用于Node.js应用程序的模块,使电子邮件发送变得轻松如同做蛋糕一样。
nodemailer-express-handlebars这是一个用于nodemailer的插件,它使用express-handlebars视图引擎来生成电子邮件。

6)安全

安全相关说明
helmetHelmet通过设置HTTP响应标头来帮助加强Express应用程序的安全性。
csrf-csrf一个实用的工具包,用于在Express中使用双重提交Cookie模式来实现无状态CSRF保护。

7)数据库和ORM

数据库相关说明
mongoose优雅的Node.js下的MongoDB对象建模
node-sqlite3Node.js的异步、非阻塞SQLite3绑定。
Sequelize功能丰富的ORM适用于现代Node.js 和TypeScript,支持PostgreSQL(包括JSON和JSONB支持)等多种数据库
mysql2⚡ 用于 Node.js 的快速的 mysqljs/mysql 兼容 MySQL 驱动程序
typeORMTypeScript 和 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-limitExpress 的基本速率限制中间件。

9)文件上传

文件上传说明
multer处理文件上传
express-fileupload一个简单的 Express 文件上传中间件,封装了 busboy。
graphql-upload中间件和上传标量,用于向各种 Node.js GraphQL 服务器添加对 GraphQL 多部分请求(通过查询和突变进行文件上传)的支持。

10)日志与调试

日志与调试说明
morganNode.js 的 HTTP 请求日志记录中间件
express-winston-middlewareExpress 的 Winston 日志包装器和中间件。
debug一个小型的 JavaScript 调试实用工具,模仿了 Node.js 核心的调试技术。适用于 Node.js 和 web 浏览器。

11)授权与认证

授权与认证说明
passport简洁、不显眼的Node.js身份验证
express-jwt连接/Express中间件,用于验证JsonWebToken(JWT)并使用属性设置req.user
express-basic-auth用于Express的即插即用的基本身份验证中间件
jsonwebtokenJSON Web Tokens 的实现

12)webpack 相关

webpack 相关说明
webpack-hot-middlewareWebpack热重载,您可以附加到自己的服务器
http-proxy-middleware⚡ 适用于 connect、express、next.js 等的一行代码的 Node.js HTTP 代理中间件

13)类型

类型约束说明
@types/expressexpress 声明文件
@types/nodenodejs 声明文件

14)部署

部署说明
pm2PM2 是一个守护进程管理器,将帮助您管理并确保您的应用程序全天候在线。

15) 代理

代理说明
express-http-proxyExpress中间件,用于代理请求到另一个主机并将响应传递回原始调用者。

16)静态资源相关

静态资源说明
serve-static服务静态文件
express-faviconExpress中间件的网站图标(favicon)支持
serve-favicon网站图标提供中间件

17)文档

文档说明
swagger-node-express用于 Node.js 的 Swagger 模块(已废弃)
swagger-ui-express向您的 Express 应用添加中间件,以提供与您的 Swagger 文档绑定的 Swagger UI。这充当了您应用程序内部托管的 API 的实时文档。

18)用户代理

用户代理说明
express-useragentNodeJS 用户代理中间件

19)cookie 和 session

cookie-session说明
sessionExpress 的简单会话中间件
cookie-session简单的基于 Cookie 的会话中间件。

20)环境变量相关

环境变量说明
dotenv从 .env 文件加载环境变量,适用于 Node.js 项目
dotenv-expanddotenv 的变量扩展。扩展已存在于您的计算机上的变量,以便在您的 .env 文件中使用
cross-env在各种平台上运行设置和使用环境变量的脚本

21)websocket

websocket 相关说明
socket.io实时应用程序框架(Node.js 服务器)
ws简单易用、极速且经过充分测试的 Node.js WebSocket 客户端和服务器

22)缓存压缩

缓存压缩说明
express-cache-controller用于在应用程序内部管理缓存控制标头的简单轻量级模块。
compressionNode.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和浏览器。
chaiChai 是一个适用于 Node 和浏览器的 BDD / TDD 断言库,可以轻松与任何 JavaScript 测试框架搭配使用。
jestJest 是一个令人愉悦的 JavaScript 测试框架,注重简单性。
vitest一种基于Vite的本地单元测试框架。它速度快!
cypress使用Cypress,您可以轻松创建现代Web应用的测试,通过可视方式进行调试,并在持续集成构建中自动运行它们。

25)国际化

国际化说明
i18n-express一个简单的国际化Express中间件
i18next-http-middlewarei18next-http-middleware 是一个可用于Node.js Web框架(如express或Fastify)以及Deno的中间件。

26)api 范式

api 类型说明
express-graphqlexpress-graphql 模块提供了一种简单的方式来创建一个运行GraphQL API的Express服务器。
apollo-server🌍 符合规范且适用于生产环境的JavaScript GraphQL服务器,让您可以以模式为先的方式进行开发。适用于Express、Connect、Hapi、Koa等。

27) 加密与解密

加密解密说明
cryptonodejs 内置了 crypto
crypto-jsJavaScript密码标准库。
bcryptNode.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)技术栈

-   MongoDB — 文档型数据库
-   Express(.js) — Node.js web 框架
-   React(.js) —客户端 JS web 框架
-   Node(.js) — 首选的JavaScript Web服务器
-   MongoDBdocument 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基于 Express.js、Typescript、NATS-Streaming 和 Next.js 创建的事件驱动微服务架构的电子商务应用程序。

六、上层抽象和知名项目

上层抽象说明
@nestjs/platform-express基于 express 的nestjs底层适配
@fastify/expressFastify 的 Express 兼容层
sailsNode.js 的实时MVC框架
keystonejs最强大的无界面CMS(内容管理系统)用于Node.js — 基于GraphQL和React构建

七、优质教程

上层抽象说明
nodebestpracticesNode.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-typescriptNode.js 后端架构 TypeScript - 学习构建一个像Medium和FreeCodeCamp这样的生产就绪博客平台的后端服务器。
express-rest-boilerplate⌛️ 用于构建RESTful API的Express入门套件

九、express 底层技术

express 本身更多是完成路由相关功能,

包名版本说明
accepts~1.3.8HTTP内容协商库
array-flatten1.1.1数组扁平化工具
body-parser1.20.2解析请求体的中间件
content-disposition0.5.4处理Content-Disposition头的库
content-type~1.0.4处理HTTP Content-Type头的库
cookie0.5.0HTTP cookie的库
cookie-signature1.0.6用于签署和验证Cookie的库
debug2.6.9调试工具库
depd2.0.0轻量级的错误处理库
encodeurl~1.0.2URL编码工具
escape-html~1.0.3HTML转义工具
etag~1.8.1HTTP ETag生成和验证库
finalhandler1.2.0处理HTTP请求的最终中间件
fresh0.5.2HTTP缓存控制工具
http-errors2.0.0创建HTTP错误的工具库
merge-descriptors1.0.1合并对象描述符的库
methods~1.1.2HTTP请求方法集合的库
on-finished2.4.1HTTP响应完成事件处理库
parseurl~1.3.3解析URL的库
path-to-regexp0.1.7路由路径到正则表达式的转换工具
proxy-addr~2.0.7处理代理IP地址的中间件
qs6.11.0解析和序列化查询字符串的库
range-parser~1.2.1HTTP Range头解析工具
safe-buffer5.2.1安全的缓冲区实用程序
send0.18.0发送文件或数据的库
serve-static1.15.0提供静态文件的中间件
setprototypeof1.2.0设置对象的原型链的库
statuses2.0.1HTTP状态码的库
type-is~1.6.18判断请求的Content-Type的库
utils-merge1.0.1合并对象属性的库
vary~1.1.2HTTP Vary头处理工具

小结

本文主要探索了 Express 生态中内容,包含了不同业务类型的中间件包含:静态资源、压缩、超时、授权认证、cookie 和 session 等等。同时提供了不同的社区模板(包含 TypeScript), express5 版本进入了 beta 版本中,也可以进行尝试。