@ailura/nestjs-hono-适应器
运行 NestJS 应用程序的 HTTP 适配器 浩诺,下面没有快车或快车。 核心为运行时间中和; a 运输 决定如何提供: bunServer() (Bun自己的服务器,默认), nodeServer() 页:1 @hono/node-server,或 fetchServer() 对于服务于网络的主机 Request编号 :Response。 。 。 .
问题:雀巢没有正式的Hono适配器. 两个已公布的替代品针对"巢穴"11,回答不正确——一个将成功状态交还给一个丢弃的处理者,另一个将每回回复写出两次.
解决方案: 本套件执行 Nest 11/12 AbstractHttpAdapter 直接在Hono上签约:线路注册于Hono申请,Hono's Web Request编号 :Response 翻译为Nest读取的对象.
安装
bun add @ailura/nestjs-hono-adapter hono
@nestjs/common, (中文(简体) ), @nestjs/core, (中文(简体) ), hono, (中文(简体) ), rxjs 财务报告和审定财务报表 @hono/node-server 是同行,所以应用程序决定它们的版本. @hono/node-server 是可选的:只有 ./node-server 运输工具到达它,一个机舱或调取部署从不装载它。 使用 npm install 或者说 pnpm add 替换 bun add 视需要而定.
可选能力生活在自己的一个包里,有一个单一的入站点,所以导入它不会装入其他任何:
| 软件包 | 对于 | 安装 |
|---|---|---|
@ailura/nestjs-platform-hono-multipart | 上传 | busboy |
WebSockets 不是一种能力而是一种 兼容桥数字 : @ailura/nestjs-platform-hono-ws 适应巢穴自己的 @nestjs/platform-ws WsAdapter 到Hono,所以你安装了软件包,不写进 app.useWebSocketAdapter(new WsAdapter(app)) 是整条线 袜子。 IO是相同的,通过 @ailura/nestjs-platform-hono-socket-io 和库存 @nestjs/platform-socket.io IoAdapter。见 文档/兼容性。 。 。 .
一个 socket.io网关由Bun Transport自己的服务器提供,它可以捆绑一个引擎,由节点 Transport的 http.Server 否则; 接取运输既无,也因姓名而被拒绝.
配套软件包
| 软件包 | 它会做什么 | 何时安装 |
|---|---|---|
@ailura/nestjs-hono-adapter | 适配器本身 | 永远 |
@ailura/nestjs-platform-hono-multipart | 多段上传 busboy | 上传路线 |
@ailura/nestjs-platform-hono-graphql | @nestjs/apollo ApolloDriver 装入Hono | 图QL 驱动程序 |
@ailura/nestjs-platform-hono-ws | @nestjs/platform-ws WsAdapter 装入Hono | 网络安全网关 |
@ailura/nestjs-platform-hono-socket-io | @nestjs/platform-socket.io IoAdapter 装入Hono | 袜子。 IO 网关 |
@ailura/nestjs-platform-hono-serve-static | 配有Hono的静态服务 | 静态资产 |
在这个仓库里:
迁移到 2.x
五事破了追踪的部署 @ailura/[email protected]数字 : ./ws 移动,默认运输 不再是节点之一, HonoWsAdapter 安全头被默认关闭, 包只使用无害环境管理.
./ws 编辑 HonoWsAdapter 出口不见了 WebSockets 由股票服务 @nestjs/platform-ws WsAdapter,装入Hono旁 @ailura/nestjs-platform-hono-ws; 安装兼容区域发现的软件包, 所以部署时不写入该软件包, 代之以命名库存类 @nestjs/platform-ws 替换 @hono/node-ws。 。 。 .
| 旧 | 新设 |
|---|---|
@ailura/nestjs-hono-adapter/ws | @ailura/nestjs-platform-hono-ws,单独安装 |
new HonoWsAdapter(app) | new WsAdapter(app) 从 @nestjs/platform-ws |
只有网关 path 遵守;电线协议是 platform-ws属于自己的.
零配置的靴子现在通过 bunServer() 在那里服务过 @hono/node-server;在节点上部署明确命名运输(使用) (中文(简体) ).
ServerAdapterOptions.overrideGlobalObjects 不见了 nodeServer() 带着它,默认为 true, 最快的路径和隐含的节点运输行为 Request 财务报告和审定财务报表 Response 需要全过程且没有恢复, 因此要让全局独有的用户按名问: nodeServer({ overrideGlobalObjects: false })。 。 。 .
secureHeaders 默认为 true 现在默认为 false; 依赖于默认集的部署 secureHeaders: true。 。 。 .
Bun运输解决了 hono/bun 在顶层等待,所以根入点仍然在节点上进口,这使得一揽子无害环境管理仅: require() 抛出, import 在Node和Bun工作过.
./multipart 财务报告和审定财务报表 ./socket-io 添加到 main 在1.4.1之后,而且从未发表过,所以没有人必须为他们迁移 main 并导入一个上方安装匹配包.
使用
import { NestFactory } from '@nestjs/core';
import { ServerAdapter } from '@ailura/nestjs-hono-adapter';
import { bunServer } from '@ailura/nestjs-hono-adapter/bun-server';
import { AppModule } from './app.module.ts';
const app = await NestFactory.create(
AppModule,
new ServerAdapter({
bodyLimit: 2 * 1024 * 1024,
transport: bunServer(),
trustProxy: true,
}),
);
app.enableCors({
credentials: true,
origin: ['https://app.example.com'],
});
await app.listen(3000);
new ServerAdapter() 没有 transport 通过Bun自己的服务器服务。 在节点命名上的部署:
import { nodeServer } from '@ailura/nestjs-hono-adapter/node-server';
new ServerAdapter({ transport: nodeServer() });
nodeServer() 带 autoCleanupIncoming (默认) true),它耗尽了身体从未被阅读的请求,以及 overrideGlobalObjects (默认) true),它问 @hono/node-server 以取代进程 Request 财务报告和审定财务报表 Response 其较轻等级——最快的道路,以及全过程;通过 false 远离全球。 两个都只够 @hono/node-server,所以他们不会改变任何部署 服务通过 bunServer()。 。 。 .
在取回主机(Cloudflare Workers)上,Vercel函数或德诺函数(Deno),运输不取任何港口,部署输出操作器:
import { fetchHandler, fetchServer } from '@ailura/nestjs-hono-adapter/fetch';
const adapter = new ServerAdapter({ transport: fetchServer() });
const app = await NestFactory.create(AppModule, adapter);
await app.init();
export default { fetch: fetchHandler(adapter.getHono()) };
listen() 在获取服务器上被拒绝,将错误传递到调用中,或者在不给出时扔出。 获取处理器默认没有客户端地址并忽略 cf-connecting-ip; 通过 fetchHandler(app, { clientAddress }) 并有一个解析器 一个信任的,主机提供地址, 并读取一个头 在那里,只有当主机保证客户端不能伪造它. x-forwarded-for 静态用品 ip 何时 trustProxy 信任代理服务器 。 见 获取主机。 。 。 .
getType() 答题 hono,价值生态系统包分支打开.
进行中测试时,请拨 await app.init() 在此之前 app.inject()。字符串目标接受相对路径和绝对URL; query 添加到已有查询中 。 获取和头部忽略 payload编号 :body;其他方法作为请求体发送.
setOnRequestHook() 当钩子呼叫时继续请求 done 或它返回的许诺/可确认的决断,以先发生者为准. setOnResponseHook() 当链子解决时运行, 包括当请求的钩子扔出或拒绝时; 它等待最多1秒钟的响应-hook工作后才会释放响应, 之后的拒绝仍然被记录. 见 仪器钩。 。 。 .
选项
app.set('views', directory) 接受字符串或字符串数组,按顺序搜索; app.set('view engine', extension) 接受字符串。 查看数据组合 setViewEngine({ defaultContext }), (中文(简体) ), setLocal() 值和处理器数据,按此顺序保存本地数据,包括密钥,例如 __proto__。 。 。 .
| 选项 | 类型 | 默认 | 效果 |
|---|---|---|---|
bodyLimit | number | 1 MiB | 最大非多元请求正文,以字节表示; 0 删除限制。 多段解析使用上传路由 limits 当启用多段包时; 仍然检查已声明的长度. |
rawBody | boolean | false | 保留读取的字节 NestRequest.rawBody |
secureHeaders | boolean | object | false | 安装 hono/secure-headers,带有默认值或给定选项;默认关闭 |
transport | Transport | —— 说 | 运行时间 : bunServer(), (中文(简体) ), nodeServer() 或者说 fetchServer() |
trustProxy | boolean | number | string[] | false | 读取 x-forwarded-proto, (中文(简体) ), x-forwarded-for 财务报告和审定财务报表 x-forwarded-host |
views | object | —— 说 | 发动机 a @Render() 处理器制作,模板从何处读取 |
app.useBodyParser() 接受 json, (中文(简体) ), urlencoded, (中文(简体) ), text 财务报告和审定财务报表 raw; 不支持的名称被拒绝 。 解析遵循请求的内容类型,以及 limit 适用于每个解析器和路由; 省略 limit 仍然允许解析并应用生体设置,使现有的尺寸限制保持不变.
文档
存储库的架构、部署、对等和API参考系统 docs/ 目录.
所需资源
- Bun 1.2+(工具链,以及默认运输的运行时间),或节点22.12+.
@hono/node-server,哪个nodeServer()服务通过;它是可选的对等端,默认的传输是Bun自己的服务器.- 巢11号或巢12号.
- 呼诺 4.
许可证
麻省理工学院