新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/16 13:56:08来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

树莓派4B+STM32构建ROS机器人:上下位机通信与里程计融合实战 2026/9/16 13:54:35

树莓派4B+STM32构建ROS机器人:上下位机通信与里程计融合实战

简介:基于树莓派4B与STM32协同设计的ROS机器人完整项目包,面向嵌入式、单片机方向的毕设、课设、竞赛及工程实训人群。内含完整源码、工程文件与说明文档,可帮助快速复现机器人系统,并支持在既有框架上扩展功能。压缩包共1102个文…

阅读更多 →
51单片机蜂鸣器播放音乐:定时器中断实现音调与节拍控制 2026/9/16 13:54:35

51单片机蜂鸣器播放音乐:定时器中断实现音调与节拍控制

简介:单片机初学者与嵌入式爱好者可借助这套C语言项目,掌握51单片机蜂鸣器播放音乐的完整实现思路;资源包含两套实验工程源码,配套《单片机音乐中音调和节拍的确定方法》PDF文档,集中讲解如何将乐谱转换为单片机可识别…

阅读更多 →
Django在线考试系统:从模型设计到部署的完整实战解析 2026/9/16 13:54:35

Django在线考试系统:从模型设计到部署的完整实战解析

简介:面向计算机相关专业学生的Django在线考试系统毕业设计源码包,基于Python与MySQL实现,个人项目评审得分97分,经过严格调试确保可直接运行。这套系统覆盖用户登录、试题管理、在线答题、成绩统计等典型考试模块,适合…

阅读更多 →
Docker 多阶段构建实战:从镜像瘦身到构建缓存优化 2026/9/16 13:54:35

Docker 多阶段构建实战:从镜像瘦身到构建缓存优化

很多人在 Docker 上踩过同一个坑:本地跑得好好的服务,打出来的镜像动辄几个 GB,推送到仓库慢到怀疑人生,拉到生产环境还要等半天。一开始我以为是网络问题,后来才发现根本不是——是 Dockerfile 本身写得太“脏”了&am…

阅读更多 →
agent-skills:TypeScript + Nx 构建可维护AI智能体能力范式 2026/9/16 13:54:35

agent-skills:TypeScript + Nx 构建可维护AI智能体能力范式

1. “agent-skills”不是项目名,而是一套可复用的智能体能力开发范式你第一次在 GitHub 或 Nx 工作区里看到agent-skills这个包名时,大概率会下意识认为:这是某个 AI Agent 的功能模块集合,比如“调用天气 API”“解析 PDF”“执行…

阅读更多 →
VidBee:支持1000+网站的跨平台视频下载与转写管理工具 2026/9/16 13:51:34

VidBee:支持1000+网站的跨平台视频下载与转写管理工具

VidBee:支持1000网站的跨平台视频下载与转写管理工具 【免费下载链接】VidBee Download video and audio from YouTube , TikTok , Twitter , Instagram , Facebook , Twitch , Bilibili , and 1000 sites—or import local media. Create searchable transcripts o…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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