基本设置
HTML 导入
Bun 支持直接将 HTML 文件导入服务器代码,实现全栈应用,包含服务器端和客户端代码。HTML 导入有两种模式: 开发模式 (bun --hot): 资源在运行时按需打包,支持热模块替换(HMR),实现快速迭代开发。当你更改前端代码时,浏览器会自动更新,无需完全刷新页面。
生产模式 (bun build): 使用 bun build --target=bun 构建时,import index from "./index.html" 会解析为预构建的清单对象,包含所有打包好的客户端资源。Bun.serve 使用此清单提供优化过的资源,零运行时打包开销,非常适合生产环境部署。
配置
更改 port 和 hostname
要配置服务器监听的端口和主机名,在选项对象中设置 port 和 hostname。
port 为 0 来随机选择一个可用端口。
port 属性或 url 属性来查看选中的端口。
配置默认端口
Bun 支持多种选项和环境变量来配置默认端口。默认端口在未设置port 选项时使用。
--port命令行参数
BUN_PORT环境变量
PORT环境变量
terminal
NODE_PORT环境变量
terminal
Unix 域套接字
要监听 Unix 域套接字,请传入unix 选项并指定套接字路径。
抽象命名空间套接字
Bun 支持 Linux 抽象命名空间套接字。使用抽象命名空间套接字时,在unix 路径前加前缀空字节(\0)。
idleTimeout
通过在Bun.serve 中设置 idleTimeout 字段来配置空闲超时时间。
export default 语法
到目前为止,页面上的示例均使用显式的Bun.serve API。Bun 还支持另一种写法。
server.ts
<undefined> 表示 WebSocket 数据 —— 如果你添加了带有自定义数据的 websocket 处理器,通过 server.upgrade(req, { data: ... }) 附加数据,则将 undefined 替换为你的数据类型。
无需调用 Bun.serve,直接导出服务器选项。这文件可直接运行;当 Bun 看到存在一个含有 fetch 处理器的 default 导出时,会自动传入 Bun.serve。
热路由重载
使用server.reload() 无需重启服务器即可更新路由:
服务器生命周期方法
server.stop()
停止服务器接受新连接:
stop() 会允许正在进行的请求和 WebSocket 连接完成。传入 true 会立即终止所有连接。
server.ref() 和 server.unref()
控制服务器是否保持 Bun 进程存活:
server.reload()
无需重启即可更新服务器处理器:
fetch、error 和 routes。
每请求控制
server.timeout(Request, seconds)
为单个请求设置自定义空闲超时:
0 可禁用该请求的超时。
server.requestIP(Request)
获取客户端 IP 和端口信息:
null。
服务器指标
server.pendingRequests 和 server.pendingWebSockets
使用内置计数器监控服务器活动:
server.subscriberCount(topic)
获取某个 WebSocket 主题的订阅者数量:
性能基准
以下是 Bun 和 Node.js 实现的简单 HTTP 服务器,每个请求都响应Bun!。
Bun
| 运行环境 | 每秒请求数 |
|---|---|
| Node 16 | ~64,000 |
| Bun | ~160,000 |

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