# @asenajs/hono-adapter 中文文档

规范地址：https://npmcn.com/package/%40asenajs/hono-adapter/

版本：5\.0\.2
npm 元数据更新时间：2026-10-31T13:21:53.817Z
中文译文更新时间：2026-10-31T14:19:56.065Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40asenajs/hono-adapter
原文对照：https://npmcn.com/package/%40asenajs/hono-adapter/?lang=original
项目主页：https://github.com/AsenaJs/hono-adapter#readme
源码仓库：https://github.com/AsenaJs/hono-adapter

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：264 kB，75 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：zod ^4\.3\.6，hono \>=4\.12\.9，typescript ^5\.8\.2，@asenajs/asena ^0\.12\.0
- 首次发布：2025-03-27T23:12:16.121Z
- 最新版本发布：2026-10-31T13:21:53.481Z
- 已发布版本数：17（近 12 个月 12 个）

## 中文简介

Hono服务器和用于Asenajs的websocket适配器

## 安装

```sh
npm install @asenajs/hono-adapter
```

也可以使用：`pnpm add @asenajs/hono-adapter`、`yarn add @asenajs/hono-adapter`、`bun add @asenajs/hono-adapter`

## README

# Asena Hono适配器

[![Version](https://img.shields.io/npm/v/@asenajs/hono-adapter.svg)](https://github.com/AsenaJs/hono-adapter) [![Bun Version](https://img.shields.io/badge/Bun-1.4%2B-blueviolet)](https://bun.sh/)

基于Hono web框架的Asena.js的HTTP和WebSocket适配器实现。

## 功能

-   快速和现代的API端点 [Hono](https://hono.dev/) web框架
-   高性能与Bun运行时
-   TypeScript的完整类型支持
-   HTTP和WebSocket适配器支持
-   易于集成和使用
-   Zod的验证支持
-   基于控制器的路由的装饰器

请求管道顺序：全局中间件→路由中间件→验证器→处理程序。

## 要求

-   [包子](https://bun.sh/) V1.4或更高版本
-   [@asenajs / asena](https://github.com/AsenaJs/Asena) V0.12.0或更高版本（对等依赖）
-   [Hono](https://hono.dev/) V4.12.9或更高版本（对等依赖）
-   [萨德](https://zod.dev/) V4.3.6或更高版本（对等依赖）
-   TypeScript v5.8.2或更高版本

## 安装

```bash
bun add @asenajs/hono-adapter hono zod
```

`hono` 和 `zod` 是 **同行依赖性** -此适配器提供包装器，您的项目拥有 它包装的库。这就是将您的代码和适配器保存在单个副本上的原因 `hono`;两个 拷贝意味着两个 `HTTPException` 类，并且从错误的类抛出一个故意的403得到回答 500.

| 包管理器 | 命令 |
| :-- | :-- |
| Bun, NPM 7+, PNPM 8+ | `bun add hono zod` -对等体自动安装，但无论如何声明它们，以便它们在干净安装中存活 |
| 纱1 | `yarn add hono zod` - - - - - - **要求**， yarn 1不为您安装peers |

## 使用

### 服务器设置（index.ts）

```typescript
import { AsenaServer } from '@asenajs/asena';
import { DefaultLogger } from "@asenajs/asena/logger";
import { createHonoAdapter } from '@asenajs/hono-adapter';

const [adapter, logger] = createHonoAdapter(new DefaultLogger());

await new AsenaServer(adapter)
  .logger(logger)
  .port(3000)
  .start(true);
```

### 控制器的例子

```typescript
import { Controller } from '@asenajs/asena/decorators';
import { Get } from '@asenajs/asena/decorators/http';
import type { Context } from '@asenajs/hono-adapter';

@Controller()
export class TestController {
  @Get("/")
  public async me(context: Context) {
    return context.send("Hello World!");
  }
}
```

## API文档

### createHonoAdapter(记录器、期权)

用于创建Hono适配器的辅助函数。

**参数:**

-   `logger` （Logger）：来自Asena的Logger实例

**返回:**

-   带有\[adapter， logger\]的元组

## 测试

Asena Hono适配器使用Bun的内置测试框架进行单元和集成测试。

### 运行测试

```bash
# Run all tests
bun test

# Run tests with watch mode
bun test:watch

# Run tests with coverage report
bun test:coverage
```

### 测试结构

-   **单元测试**：单独测试各个组件
    
    -   `HonoAdapter.test.ts` -测试HTTP适配器
    -   `HonoContextWrapper.test.ts` -测试上下文包装器
    -   `HonoWebsocketAdapter.test.ts` -测试WebSocket适配器
-   **集成测试**：测试组件如何协同工作
    
    -   `integration.test.ts` -适配器的端到端测试

### 编写测试

测试控制器的示例：

```typescript
import { describe, expect, it } from "bun:test";
import { AsenaServer } from "@asenajs/asena";
import { createHonoAdapter } from "@asenajs/hono-adapter";
import { DefaultLogger } from "@asenajs/asena/logger";
import { YourController } from "../path/to/your/controller";

describe("YourController", () => {
  let server;
  let baseUrl;
  
  beforeEach(async () => {
    // 10000-31999: below the kernel's ephemeral floor (net.ipv4.ip_local_port_range,
    // 32768-60999). A server port drawn from that range collides with the outbound
    // sockets the suite itself holds open - TIME_WAIT included - and Bun.serve then
    // fails with EADDRINUSE, randomly, in whichever test happened to draw it.
    const port = 10000 + Math.floor(Math.random() * 22000);
    const [adapter, logger] = createHonoAdapter(new DefaultLogger());
    const app = new AsenaServer(adapter).logger(logger).port(port);
    
    app.register(YourController);
    
    server = await app.start();
    baseUrl = `http://localhost:${port}`;
  });
  
  afterEach(() => {
    server.stop();
  });
  
  it("should respond correctly", async () => {
    const response = await fetch(`${baseUrl}/your-endpoint`);
    const data = await response.json();
    
    expect(response.status).toBe(200);
    expect(data).toEqual({ /* expected response */ });
  });
});
```

## 开发

以开发模式运行项目：

```bash
bun run build
```

## 许可证

本项目使用麻省理工学院许可协议。看到 [许可证](https://npmcn.com/package/%40asenajs/hono-adapter/LICENSE) 文件查看详细信息。

## 常见问题

### @asenajs/hono-adapter 是什么？

Hono服务器和用于Asenajs的websocket适配器

### 如何安装 @asenajs/hono-adapter？

在项目目录运行 npm install @asenajs/hono-adapter，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（^4\.3\.6）、hono（\>=4\.12\.9）、typescript（^5\.8\.2）、@asenajs/asena（^0\.12\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @asenajs/hono-adapter 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @asenajs/hono-adapter 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @asenajs/hono-adapter 可以商用吗？

@asenajs/hono-adapter 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @asenajs/hono-adapter 还在维护吗？

最新版本 5\.0\.2 发布于 2026/10/31（2 天前）；至今共发布 17 个版本，其中过去 12 个月发布了 12 个；首次发布于 2025/03/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

