基本设置
index.ts
HTML 导入
将 HTML 文件直接导入到服务器代码中,构建同时包含服务端和客户端代码的全栈应用。HTML 导入支持两种模式: 开发模式 (bun --hot): Bun 在运行时按需打包资源,并启用热模块替换 (HMR):当你修改前端代码时,浏览器自动更新,无需完整页面刷新。
生产模式 (bun build): 当你使用 bun build --target=bun 构建时,import index from "./index.html" 语句解析为一个预构建的清单对象,其中包含所有打包好的客户端资源。Bun.serve 从该清单中提供资源,无需在运行时进行打包。
配置
修改 port 和 hostname
要配置服务器监听的端口和主机名,请在选项对象中设置 port 和 hostname。
port 设置为 0。
port 或 url 属性中读取所选端口。
配置默认端口
当未设置port 选项时,几个标志和环境变量会设置 Bun 使用的默认端口。
--portCLI 标志
BUN_PORT环境变量
PORT环境变量
terminal
NODE_PORT环境变量
terminal
Unix 域套接字
要监听 Unix 域套接字,传递unix 选项并指定套接字路径。
抽象命名空间套接字
在 Linux 上,Bun 还支持抽象命名空间套接字:在unix 路径前加上一个空字节。
HTTP/3 (QUIC)
Bun.serve 中的 HTTP/3 支持是实验性的,可能在未来版本中发生变更。Bun.serve 也可以通过 QUIC 协议监听 HTTP/3。设置 http3: true 并结合 tls;HTTP/3 需要 TLS。
http3 时,服务器同时通过 TCP (HTTP/1.1) 和 UDP (HTTP/3) 监听同一端口。HTTP/1.1 响应中包含 Alt-Svc 头部,通知 HTTP/3 端点,支持该协议能力的客户端可以自动升级。
如果只想服务 HTTP/3(完全不监听 TCP),可以设置 http1: false:
Unix 域套接字不支持
http3——QUIC 需要一个 UDP 端口。http1: false 需要同时设置 http3: true。idleTimeout
默认情况下,Bun.serve 会在10 秒无活动后关闭连接。当没有数据发送或接收时,连接被视为空闲,包括正在处理中的请求——即你的处理器仍在运行但尚未向响应写入任何字节。浏览器和 fetch() 客户端会将其视为连接重置。
要配置此设置,请设置 idleTimeout 字段(以秒为单位)。最大值为 255,设置为 0 则完全禁用超时。
流式传输与服务器发送事件——空闲定时器在响应流式传输时同样生效。如果你的流空闲时间超过
idleTimeout,Bun
会在响应传输中途关闭连接。对于长时间运行的流,可以使用 server.timeout(req, 0)
禁用该请求的超时。export default 语法
你可以不将服务器选项传递给Bun.serve,而是使用 export default 导出。
server.ts
<undefined> 是 WebSocket 数据类型。如果你添加了使用 server.upgrade(req, { data: ... }) 附加自定义数据的 websocket 处理器,请将 undefined 替换为你的数据类型。
你可以直接运行此文件:当 Bun 发现一个包含 fetch 处理器的 default 导出的文件时,会将其传入 Bun.serve。
热路由重载
使用server.reload() 可无需重启服务器即可更新路由:
服务器生命周期方法
server.stop()
停止服务器接受新连接:
stop() 允许正在处理的请求和 WebSocket 连接完成。传递 true 可立即终止所有连接。
server.ref() 和 server.unref()
控制服务器是否保持 Bun 进程继续运行:
server.reload()
无需重启即可更新服务器的处理器:
fetch、error、routes 和 websocket 可以更新。
按请求控制
server.timeout(Request, seconds)
覆盖单个请求的空闲超时时间。传递 0 可完全禁用该请求的超时。
server.timeout(req, 0) 保持长时间运行的流式响应(如服务器发送事件)存活,而无需为每个请求提高全局 idleTimeout:
server.requestIP(Request)
获取客户端 IP 和端口信息:
null。
服务器指标
server.pendingRequests 和 server.pendingWebSockets
使用内置计数器监控服务器活动:
server.subscriberCount(topic)
获取 WebSocket 主题的订阅者数量:
基准测试
以下 Bun 和 Node.js 服务器对每个传入的Request 都响应 Bun!。
Bun
Bun.serve 服务器在 Linux 上每秒可处理的请求数量大约是 Node.js 的 2.5 倍。

实战示例:REST API
以下是一个使用 Bun 路由器的基本数据库驱动 REST API,零依赖:参考
查看 TypeScript 定义