入门指南(Getting Started)
使用 Hono 非常简单。我们可以快速完成项目搭建、写代码、用本地服务器开发并进行部署。相同的代码可以在任意运行时(runtime)运行,只是入口文件略有不同。下面我们来看一下 Hono 的基础用法。
Starter(启动模板)
每个平台都有可用的 Starter 模板。使用下面的 create-hono
命令即可创建项目。
npm
npm create hono@latest my-app
yarn
yarn create hono my-app
pnpm
pnpm create hono@latest my-app
bun
bun create hono@latest my-app
deno
deno init --npm hono@latest my-app
接着你会被询问想要使用哪个模板。这里我们选择 Cloudflare Workers。
? Which template do you want to use?
aws-lambda
bun
cloudflare-pages
❯ cloudflare-workers
deno
fastly
nextjs
nodejs
vercel
模板会被下载到 my-app
目录下,进入该目录并安装依赖。
npm
cd my-app
npm i
yarn
cd my-app
yarn
pnpm
cd my-app
pnpm i
bun
cd my-app
bun i
依赖安装完成后,运行以下命令启动本地服务器。
npm
npm run dev
yarn
yarn dev
pnpm
pnpm dev
bun
bun run dev
Hello World
你可以直接用 TypeScript 编写代码,通过 Cloudflare Workers 的开发工具 Wrangler、Deno、Bun 或其他工具运行,而无需关注转译。
在 src/index.ts
中写出你的第一个 Hono 应用。下面是一个 Hono 的基础示例。
import
和 export default
的写法会因运行时(runtime)不同而略有差别,但应用的业务代码在所有环境中都是通用的。
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => {
return c.text('Hello Hono!')
})
export default app
启动开发服务器后,用浏览器访问 http://localhost:8787
。
npm
npm run dev
yarn
yarn dev
pnpm
pnpm dev
bun
bun run dev
返回 JSON
返回 JSON 也非常简单。下面是一个处理 GET 请求 /api/hello
并返回 application/json
的例子。
app.get('/api/hello', (c) => {
return c.json({
ok: true,
message: 'Hello Hono!',
})
})
Request 和 Response
获取路径参数、URL 查询参数并添加 Response Header 的写法如下:
app.get('/posts/:id', (c) => {
const page = c.req.query('page')
const id = c.req.param('id')
c.header('X-Message', 'Hi!')
return c.text(`You want to see ${page} of ${id}`)
})
我们不仅能轻松处理 GET,还能处理 POST、PUT 和 DELETE。
app.post('/posts', (c) => c.text('Created!', 201))
app.delete('/posts/:id', (c) =>
c.text(`${c.req.param('id')} is deleted!`)
)
返回 HTML
你可以用 html Helper 或 JSX 语法生成 HTML。
如果想用 JSX,请将文件名改为 src/index.tsx
并根据运行时进行配置(各环境配置不同)。下面是一个 JSX 示例:
const View = () => {
return (
<html>
<body>
<h1>Hello Hono!</h1>
</body>
</html>
)
}
app.get('/page', (c) => {
return c.html(<View />)
})
返回原生 Response
你也可以直接返回原生 Response。
app.get('/', () => {
return new Response('Good morning!')
})
使用 Middleware
Middleware 可以帮你处理复杂任务。比如添加 Basic Authentication:
import { basicAuth } from 'hono/basic-auth'
// ...
app.use(
'/admin/*',
basicAuth({
username: 'admin',
password: 'secret',
})
)
app.get('/admin', (c) => {
return c.text('You are authorized!')
})
Hono 内置了包括 Bearer、JWT 鉴权、CORS 和 ETag 在内的多种常用 middleware。它还提供了第三方 middleware,如 GraphQL Server、Firebase Auth 等。同时你也可以编写自己的 middleware。
Adapter(适配器)
对于一些平台相关的功能(比如静态文件处理、WebSocket),可以使用 Adapter。
例如,在 Cloudflare Workers 中处理 WebSocket,只需引入 hono/cloudflare-workers
。
import { upgradeWebSocket } from 'hono/cloudflare-workers'
app.get(
'/ws',
upgradeWebSocket((c) => {
// ...
})
)
下一步
大部分代码可以在任何平台上运行,但项目配置和部署方式会因平台而异。 请查看你所需平台的文档以了解具体的搭建和部署步骤!