基本设置
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 选项时,将使用默认端口。
--portCLI 参数
BUN_PORT环境变量
PORT环境变量
terminal
NODE_PORT环境变量
terminal
Unix域套接字
要在 unix域套接字 上监听,请使用套接字路径传递unix 选项。
抽象命名空间套接字
Bun支持Linux抽象命名空间套接字。要使用抽象命名空间套接字,请在unix 路径前加上空字节。
idleTimeout
要配置空闲超时,请在 Bun.serve 中设置idleTimeout 字段。
export default 语法
到目前为止,本页的示例都使用了显式的Bun.serve API。Bun还支持另一种语法。
server.ts
<undefined> 表示WebSocket数据 — 如果您通过 server.upgrade(req, { data: ... }) 添加带有自定义数据的 websocket 处理程序,请将 undefined 替换为您的数据类型。
与其将服务器选项传递给 Bun.serve,不如使用 export default。这个文件可以直接执行;当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
Bun.serve 服务器每秒可以处理的请求数大约是Linux上Node.js的2.5倍。
| 运行时 | 每秒请求数 |
|---|---|
| Node 16 | ~64,000 |
| Bun | ~160,000 |

实际示例:REST API
这是一个使用Bun路由器的基本数据库支持的REST API,不依赖任何第三方库:参考
展开 查看TypeScript定义