基本设置
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 会使用该端口。
--port命令行参数
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:
http3 不支持 unix 域套接字——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 数据类型。如果你添加了一个 WebSocket 处理程序,并通过 server.upgrade(req, { data: ... }) 附加自定义数据,请将 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

实例示范:REST API
这是使用 Bun 路由的基本数据库驱动 REST API,无任何依赖:参考
See TypeScript Definitions