新闻详情

新闻详情

首页 / 资讯中心 / 详情

Fastify 如何用 serverFactory 接入自定义 HTTP Server?

发布时间:2026/9/10 22:39:20来源:尧图网络
Fastify 如何用 serverFactory 接入自定义 HTTP Server?
Fastify 如何用 serverFactory 接入自定义 HTTP Server【免费下载链接】fastifyFast and low overhead web framework, for Node.js项目地址: https://gitcode.com/GitHub_Trending/fa/fastify如果你需要在 Fastify 之外接管 HTTP 服务器本身——比如自己创建http.Server并在请求到达 Fastify 路由之前做额外处理或者复用外部已经创建好的服务器实例——Fastify 提供了serverFactory选项。它是Fastify()工厂函数 options 对象中的一个属性传进去的是一个函数Fastify 用它替代默认逻辑来生成底层 Node.js HTTP server。本文按文档 docs/Reference/Server.md 中serverFactory一节的说明演示接入方式、验证方法以及启用该选项后哪些 Fastify 选项会失效。serverFactory 的函数契约serverFactory是一个函数接收两个参数并返回一个 server 实例第一个参数handlerFastify 的内部请求处理器它接受 Node.js 原生的request和response对象。你的服务器必须在收到请求时把它转交给这个 handler否则路由、hooks 都不会工作。第二个参数opts就是你传给Fastify()的 options 对象本身仓库测试 test/custom-http-server.test.js 中直接断言了opts.serverFactory存在。返回值一个 server 实例。Fastify 内部使用的是 Node 核心 HTTP server 的 API所以你返回的实例必须暴露同样的 API如果返回的不是标准http.Server可以在return之前对该实例做增强enhance把缺少的 API 补上。TypeScript 类型定义在 types/server-factory.d.ts 中FastifyServerFactoryRawServer描述了这个函数的签名FastifyServerFactoryHandler会根据RawServer是http.Server | https.Server还是http2的 server 决定 handler 的参数类型。类型通过 fastify.d.ts 导出可以直接导入使用。最小可运行示例下面是文档给出的标准接法可直接保存为server-factory-demo.js运行需要一个已安装 fastify 的 Node.js 项目const http require(node:http) const Fastify require(fastify) const serverFactory (handler, opts) { const server http.createServer((req, res) { handler(req, res) }) return server } const fastify Fastify({ serverFactory }) fastify.get(/, (req, reply) { reply.send({ hello: world }) }) fastify.listen({ port: 3000 })要点是http.createServer的回调里只做一件事把原生req、res转交给 Fastify 传入的handler。验证接入是否生效启动后请求根路径期望得到文档示例中的响应体curl http://localhost:3000/ # 示例结果{hello:world}仓库测试 test/custom-http-server.test.js 的验证方式与之对应listen后用fetch请求断言response.status 200且 body 解析后等于{ hello: world }。如果状态码不是 200先检查serverFactory里是否把请求转交给了handler——没有转交的话请求不会进入 Fastify 路由。fastify.server属性返回的就是serverFactory里创建的那个 server 对象文档建议它只用于挂载监听器。测试中用fastify.server.address().port取实际监听端口用fastify.addresses()取监听地址数组都可以作为接入后的检查手段。在请求进入路由前做定制因为请求先经过你的http.createServer回调再进入 Fastify可以在这个位置给原生请求对象挂额外属性。测试文件中的做法是在回调里设置req.custom true然后在路由 handler 中通过request.rawraw指向原生请求对象读取它来验证定制生效serverFactory: (handler, opts) { const server http.createServer((req, res) { req.custom true handler(req, res) }) return server }对 TypeScript 项目类型测试 test/types/serverFactory.tst.ts 演示了更完整的做法定义扩展了http.IncomingMessage/http.ServerResponse的接口在 factory 内给req/res挂方法然后把FastifyServerFactoryhttp.Server类型的函数传给fastifyhttp.Server, CustomIncomingMessage, CustomServerResponse({ serverFactory })这样路由 handler 里的request.raw和reply.raw就能获得这些扩展方法的类型提示。启用 serverFactory 后失效的选项docs/Reference/Server.md中多个选项明确标注 “WhenserverFactoryoption is specified this option is ignored”即指定serverFactory后以下服务器级超时与限制选项会被忽略connectionTimeout默认0无超时keepAliveTimeout默认7200072 秒仅 HTTP/1 生效requestTimeout默认0无限制maxRequestsPerSocket默认0无限制仅 HTTP/1.1 生效原因是这些值本来由 Fastify 在默认创建服务器时设置到 server 实例上见 lib/server.js 中getServerInstance有serverFactory时直接调用它否则才执行server.keepAliveTimeout ...等赋值。改用自定义 server 后这些行为需要你在 factory 内自己设置到返回的实例上文档没有给出替代配置项。行为差异与限制几个仓库测试中确认过的行为接入前需要了解外部创建的 server 不会被 Fastify 关闭。如果serverFactory返回一个由你自己listen的已有实例测试中为serverFactory: () server并外部server.listen(0)fastify.close()不会调用该 server 的close——关闭生命周期由你自己负责。测试断言close()之后server.listening仍为true。forceCloseConnections: idle要求 server 支持closeIdleConnections。当serverFactory返回的实例没有closeIdleConnections方法时Fastify()构造阶段就会抛出FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE错误信息为 “Cannot set forceCloseConnections to idle as your HTTP server does not support closeIdleConnections method”。复用已有实例时 Fastify 会跳过二级 server 的创建。监听localhost且同时解析出多个地址时Fastify 会为额外地址创建二级 server当serverFactory返回的实例已经处于监听状态时这部分逻辑不再执行即“user defined serverFactory 优先忽略二级 server 创建”。可以继续查看的位置serverFactory与其他工厂选项的完整说明docs/Reference/Server.md类型定义types/server-factory.d.ts行为测试含request.raw定制验证、外部 server 关闭行为、forceCloseConnections抛错test/custom-http-server.test.js、test/types/serverFactory.tst.ts内部如何调用 factorylib/server.js 的getServerInstance【免费下载链接】fastifyFast and low overhead web framework, for Node.js项目地址: https://gitcode.com/GitHub_Trending/fa/fastify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Grasscutter 动漫游戏私服资源包部署完全指南:从零配置到正常登录 2026/9/10 23:27:26

Grasscutter 动漫游戏私服资源包部署完全指南:从零配置到正常登录

Grasscutter 动漫游戏私服资源包部署完全指南:从零配置到正常登录 【免费下载链接】Grasscutter A server software reimplementation for a certain anime game. 项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter 你有没有遇到过这种情况&…

阅读更多 →
SpringBoot3整合FastJSON2:手动配置MessageConverters指南 2026/9/10 23:27:26

SpringBoot3整合FastJSON2:手动配置MessageConverters指南

1. 为什么需要手动配置MessageConverters在SpringBoot3项目中整合FastJSON2时,手动配置MessageConverters是一个关键步骤。SpringBoot默认使用Jackson作为JSON处理器,但当我们希望切换到FastJSON2时,就需要覆盖默认配置。这不仅仅是简单的替换…

阅读更多 →
【多智能体】基于 o3-mini 和 Gemini 的多模态 AI 编程智能体团队 2026/9/10 23:27:26

【多智能体】基于 o3-mini 和 Gemini 的多模态 AI 编程智能体团队

目录 案例简介 案例目标 技术栈与核心依赖 编程语言与框架 核心依赖库 AI 模型 基础设施 项目结构 核心代码实现 1. 智能体架构设计 视觉智能体(Vision Agent) 编程智能体(Coding Agent) 执行智能体(Execution Agent) 2. 图像处理流程 3. 沙箱代码执行 4…

阅读更多 →
SpringBoot+Vue多维分类知识管理系统毕业设计全栈指南 2026/9/10 23:27:26

SpringBoot+Vue多维分类知识管理系统毕业设计全栈指南

1. 项目背景与核心价值这个基于SpringBootVue的多维分类知识管理系统,本质上是一个面向高校计算机专业毕业设计的全栈解决方案。我在指导过37个毕业设计项目后发现,学生们最头疼的不是技术本身,而是如何把前后端技术栈有机整合,并…

阅读更多 →
MLX 实战:用 mlx.nn 从零构建多层感知机(MLP)完成 MNIST 分类 2026/9/10 23:27:26

MLX 实战:用 mlx.nn 从零构建多层感知机(MLP)完成 MNIST 分类

MLX 实战:用 mlx.nn 从零构建多层感知机(MLP)完成 MNIST 分类 【免费下载链接】mlx MLX: An array framework for Apple silicon 项目地址: https://gitcode.com/GitHub_Trending/ml/mlx 本文是 MLX(Apple silicon 上的 Nu…

阅读更多 →
code-review-graph 本地优先与隐私模型:数据边界、零遥测承诺与安全配置全解析 2026/9/10 23:24:26

code-review-graph 本地优先与隐私模型:数据边界、零遥测承诺与安全配置全解析

code-review-graph 本地优先与隐私模型:数据边界、零遥测承诺与安全配置全解析 【免费下载链接】code-review-graph Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞