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

发布时间:2026/11/8 20:32:10

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),仅供参考
延伸阅读

更多相关文章

2026/11/6 11:05:48

大模型训练服务器选型与配置实战指南

1. 大模型训练服务器的核心需求分析 作为长期从事AI研究的从业者,我经历过从单卡调试到百卡集群训练的全过程。选择训练服务器绝非简单的"买最贵显卡"这么简单,需要综合考虑计算能力、存储性能、网络拓扑和成本效益四大维度。 大模型训练对硬…

2026/11/7 9:24:18

30秒装好 TVBoxOSC:把电视变成大屏文档阅读器

30秒装好 TVBoxOSC:把电视变成大屏文档阅读器 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC TVBoxOSC 是一款电视盒子控制与管理工具…

2026/10/24 8:34:56

毕业论文查重降重工具与策略全解析

1. 毕业论文查重降重现状与痛点解析 2026届毕业生即将面临学术生涯最重要的一道关卡——毕业论文查重。作为过来人,我深知这个过程中的焦虑与压力。目前国内高校普遍采用知网、维普等权威检测系统,查重率一旦超过学校规定的阈值(通常本科15%、…

2026/11/8 20:31:58

浙江考电工证哪里考点?良心建议别走弯路

浙江考电工证哪里考点?良心建议别走弯路 你是不是也遇到过这种情况?手头的工作机会就在眼前,但因为没有电工证,被硬生生拦在门外。我认识的一个小伙子,专门从安阳跑来杭州找工作,结果面试都过了,最后因为没有低压电工证,直接被刷了。这事儿听起来让人…

2026/11/8 20:31:58

蚌埠考电工证在哪考 怎么报名外省证能转吗

蚌埠考电工证在哪考 怎么报名外省证能转吗 之前考的证在外省能不能转过来?这是很多在外地打工的电工朋友最关心的问题。尤其是像我这样在鹤壁干建筑的工人,经常面临跨省换工的情况,证能不能用、怎么报名、哪里能考,这些问题每天都在心头盘旋。…

2026/11/8 20:31:58

怎么在官网查询电工证 电子证书怎么查不影响你考过

怎么在官网查询电工证 电子证书怎么查不影响你考过 怕考不过白交培训费?电工证考试不是走过场,但只要方法对,通过率比你想象的高。很多人担心考不过钱打水漂,其实官方早就把查询和复审流程写得清清楚楚,关键是你得知道去哪里查、怎么查。本文教你…

2026/11/8 20:31:58

上栗电工证怎么复审 全国通用证别交冤枉钱了

上栗电工证怎么复审 全国通用证别交冤枉钱了 怕考不过白交培训费?你不是一个人,很多电工朋友在考证和复审路上都踩过坑。尤其是上栗电工证,作为全国通用的特种作业证,复审流程复杂,很多人因为不懂规则,不仅浪费钱,还耽误了工作。今天我就从濮阳劳务班…

2026/11/8 20:31:58

光明区电工证培训机构怎么报名更靠谱 官方报名入口全解析

光明区电工证培训机构怎么报名更靠谱 官方报名入口全解析 实操考试心里没底怕挂科?作为商丘首次报考的你,是不是对【光明区电工证培训机构】怎么选、在哪里报名、考试难度、流程怎么走,一无所知?别急,这篇文章给你最真实、最实用的报考攻略,从报名入口…

2026/11/8 20:26:58

浏阳考电工证的地方实操考试怎么准备才能拿到电子证书

浏阳考电工证的地方实操考试怎么准备才能拿到电子证书 实操考试心里没底怕挂科,这是大多数准备报考电工证的朋友最真实的感受。尤其是在浏阳,面对日益严格的特种作业操作证考核标准,很多人都在担心自己能不能顺利通过实操考试拿到电子证书。别担心,这篇文…

2026/11/8 0:00:27

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/8 0:00:27

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑