从 Express 迁移到 Fastify 的实用指南

阅读时长 6 分钟读完

前端开发者们在使用 Node.js 开发后端应用时可能会使用 Express,但是 Fastify 作为一款新的框架也逐渐得到了越来越广泛的使用。Fastify 具有更快的性能,更好的安全性和优秀的插件支持。但是,从 Express 迁移到 Fastify 可能会出现一些问题,本文将提供一些实用的指南。

安装和配置 Fastify

安装 Fastify

使用 NPM 可以轻松安装 Fastify,只需要运行以下命令即可:

配置 Fastify

Fastify 可以通过传递一个选项对象来配置和启动服务器。选项对象包括:

  • logger:设置 Fastify 的日志记录器。可以使用自定义的日志记录器或使用内置的日志记录器。
  • bodyLimit:设置请求主体的大小限制。
  • pluginTimeout:设置插件的超时时间。
  • https:允许 Fastify 监听 HTTPS 请求。
  • http2:允许 Fastify 监听 HTTP/2 请求。
  • ignoreTrailingSlash:为路由设置是否忽略尾部斜杠。
  • trustProxy:启用此选项后,Fastify 将从 X-Forwarded-* 标头解析客户端 IP。

以下是 Fastify 的基本配置:

从 Express 迁移到 Fastify

路由

定义路由

在 Express 中,我们通过创建 app 对象来定义路由:

在 Fastify 中,我们使用 fastify 对象定义路由:

需要注意的是,在 Fastify 中,回调函数的第一个参数不再是 reqres,而是一个包含了请求和响应的 requestreply 参数。

外部引用

在 Express 中,我们可以使用 require 引入其它模块的路由:

在 Fastify 中,因为它对 Node.js 的模块系统支持更好,所以可以使用 require 来引入其它模块:

需要注意的是,Fastify 使用 prefix 来指定模块的路由前缀,这与 Express 使用 app.use 的方式不同。

Middleware

定义 Middleware

在 Express 中,我们添加 Middleware 使用 app.use

在 Fastify 中,使用 fastify.use 添加 Middleware:

同样需要注意的是,忽略 next() 将导致请求被挂起。

错误处理

在 Express 中,我们可以添加全局错误处理 Middleware:

在 Fastify 中,添加错误处理 Middleware:

插件

Fastify 支持通过插件来扩展功能。下面是一些常用的插件:

  • fastify-cors:提供 CORS 支持。
  • fastify-auth:提供 JWT 和 OAuth2 支持。
  • fastify-mongodb:提供 MongoDB 支持。
  • fastify-redis:提供 Redis 支持。

安装这些插件只需要简单地调用 register 函数即可。例如,使用 fastify-cors 插件:

性能比较

根据官方提供的基准测试,Fastify 性能比 Express 提升了 3-5 倍。这归功于 Fastify 对路由、插件和错误处理等方面的优化。

结论

在此实用指南中,我们提供了从 Express 迁移到 Fastify 的一些实用指南。虽然迁移可能需要一些时间,但由于 Fastify 具有更好的性能和更高的安全性,这项工作是值得的。

示例代码:

-- -------------------- ---- -------
-- ------- --
----- ------- - --------------------
  ------- -----
  ---------- --------
  -------------- ------
--

-- ----
---------------- ----------------- ------ -
  ----------------- --------
--

-- -- ----------
----------------------------- ------ ----- -
  --------------------------
  ------
--

-- ------ ----------
------------------------------------- -------- ------ -
  ------------------
  ------------------------ ------ ---------- ------- --
--

-- ----
------------------------------------

- ------------------------------------------------------------------------------ --------
------------------------------------------------------------------------------------------------------------------------
纠错
反馈