自定义 Web Server
Modern.js 将大部分项目需要的服务端能力都进行了封装,通常项目无需进行服务端开发。但在有些开发场景下,例如用户鉴权、请求预处理、添加页面渲染骨架等,项目仍需要对服务端进行定制。
要在 Modern.js 项目中使用自定义 Web Server,请按照以下步骤操作:
- 安装
@modern-js/server-runtime依赖
如果项目尚未安装 @modern-js/server-runtime 依赖,请先安装:
请确保 @modern-js/server-runtime 的版本与项目中 @modern-js/app-tools 的版本保持一致。Modern.js 的所有官方包使用统一版本号发布,版本不一致可能导致兼容性问题。
请先查看 @modern-js/app-tools 的版本,然后安装相同版本的 @modern-js/server-runtime:
- 创建
server目录和配置文件
在项目根目录下创建 server/modern.server.ts 文件:
创建文件后,可以在这个文件中编写自定义逻辑。
自定义 Web Server 能力
Modern.js 的服务器基于 Hono 实现,在最新版本的自定义 Web Server 中,我们向用户暴露了 Hono 的中间件能力,你可以参考 Hono 文档 了解更多用法。
server/modern.server.ts 文件中添加如下配置来扩展 Server:
- 中间件(Middleware)
- 渲染中间件(RenderMiddleware)
- 服务端插件(Plugin)
其中 Plugin 中可以定义 Middleware 与 RenderMiddleware。 中间件加载流程如下图所示:
基本配置
类型定义
defineServerConfig 类型定义如下:
Middleware
Middleware 支持在 Modern.js 服务的请求处理与页面路由的流程前后,执行自定义逻辑。 即自定义逻辑既要处理接口路由,也要作用于页面路由,那么 Middleware 是不二选择。
如果仅需要处理 BFF 接口路由,可以通过检查 req.path 是否以 BFF prefix 开头,来判断是否为 BFF 接口请求。
使用姿势如下:
必须执行 next 函数才会执行后续的 Middleware。
RenderMiddleware
如果只需要处理页面渲染的前后执行逻辑,modern.js 也提供了渲染中间件,使用姿势如下:
Plugin
Modern.js 支持在自定义插件中为 Server 添加上述 Middleware 及 RenderMiddleware,使用姿势如下:
onError
onError 是一个全局错误处理函数,用于捕获和处理 Modern.js server 中的所有未捕获错误。通过自定义 onError 函数,开发者可以统一处理不同类型的错误,返回自定义的错误响应,实现错误日志记录、错误分类处理等功能。
以下是一个基本的 onError 配置示例: