# 常见问题

URL: https://caijiao.org/hono/07-appendix/02-faq
Source: docs/hono/07-appendix/02-faq.md
Description: 汇总 Hono 学习和项目实践中的常见问题，包括运行时选择、Node.js 适配器、CORS、类型推导和部署限制。

## Hono 只能运行在 Cloudflare Workers 吗

不是。Hono 可以运行在 Cloudflare Workers、Node.js、Bun、Deno、Vercel、Netlify、AWS Lambda 等环境。不同平台的入口和部署方式不同，但核心路由代码很相似。

## Hono 在 Node.js 中需要什么

Node.js 中需要使用 `@hono/node-server` 适配器。官方 Node.js 指南要求较新的 Node.js 版本，例如 18.14.1+、19.7.0+ 或 20.0.0+。

## Hono 能替代 Express 吗

可以替代一部分 Express API 项目，尤其是轻量服务、边缘 API 和 TypeScript 项目。但如果你的项目依赖大量 Express 中间件、模板系统或已有基础设施，迁移前要评估成本。

## 为什么我的 CORS 不生效

常见原因：

- CORS 中间件注册在路由之后。
- `origin` 没有包含真实前端域名。
- 请求带 Cookie，但服务端没有配置 `credentials: true`。
- 前端请求没有设置 `credentials`。
- 预检请求的请求头或方法没有被允许。

## TypeScript 类型能保证请求体安全吗

不能。TypeScript 只在编译期生效，客户端传来的 JSON 仍然可能是任意结构。公开 API 必须使用运行时验证，例如 `hono/validator` 或 `@hono/zod-validator`。

## Hono RPC 是否等于 tRPC

不完全等同。Hono RPC 基于 Hono 路由和 `hc` 客户端共享类型，适合 Hono 项目内部使用。tRPC 是更完整的端到端类型安全 RPC 框架，生态和设计目标不同。

## 可以在 Hono 中使用数据库吗

可以。Node.js 中可以使用 Prisma、Drizzle、Knex、原生驱动等。Cloudflare Workers 中更常见的是 D1、KV、R2、外部 HTTP 数据服务或支持边缘环境的数据库连接方式。

## 为什么同一套代码换运行时后报错

Hono 核心代码可以跨运行时，但依赖不一定可以。检查是否使用了：

- Node.js 专属模块，例如 `fs`、`net`、`tls`。
- 依赖长连接的数据库驱动。
- 不支持 ESM 或不兼容目标运行时的包。
- 平台不支持的环境变量读取方式。

## Hono 适合大型项目吗

Hono 可以作为大型项目中的 API 层，但它本身不提供完整大型后端架构。大型项目需要额外设计模块边界、配置管理、数据库访问、权限系统、测试、日志、监控和发布流程。
