Skip to content

入门指南

使用 Hono 非常简单。我们可以快速地搭建项目、编写代码、使用本地服务器进行开发和部署。相同的代码可以在任何运行时环境下工作,仅仅入口点有所不同。让我们来看看 Hono 的基本用法。

Starter

每个平台都有可用的 Starter 模板。使用以下 create-hono 命令。

sh
npm create hono@latest my-app
sh
yarn create hono my-app
sh
pnpm create hono@latest my-app
sh
bun create hono@latest my-app
sh
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 目录中,进入该目录并安装依赖。

sh
cd my-app
npm i
sh
cd my-app
yarn
sh
cd my-app
pnpm i
sh
cd my-app
bun i

一旦软件包安装完成,运行以下命令来启动本地服务器。

sh
npm run dev
sh
yarn dev
sh
pnpm dev
sh
bun run dev

Hello World

你可以使用 TypeScript 和 Cloudflare Workers 开发工具 "Wrangler"、Deno、Bun 或其他工具编写代码,而无需关心代码转译。

src/index.ts 中编写你的第一个 Hono 应用。下面的例子是一个 Starter Hono 应用。

import 语句和最后的 export default 部分可能因运行时环境而异,但所有的应用代码都将在任何地方运行相同的代码。

ts
import { Hono } from 'hono'

const app = new Hono()

app.get('/', (c) => {
  return c.text('Hello Hono!')
})

export default app

启动开发服务器,并使用浏览器访问 http://localhost:8787

sh
npm run dev
sh
yarn dev
sh
pnpm dev
sh
bun run dev

返回 JSON

返回 JSON 也非常简单。以下是一个处理对 /api/hello 的 GET 请求并返回 application/json 响应的示例。

ts
app.get('/api/hello', (c) => {
  return c.json({
    ok: true,
    message: 'Hello Hono!',
  })
})

请求和响应

获取路径参数、URL 查询参数以及添加响应头可以像下面这样编写。

ts
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}`)
})

我们可以轻松地处理 POST、PUT 和 DELETE 请求,而不仅仅是 GET 请求。

ts
app.post('/posts', (c) => c.text('Created!', 201))
app.delete('/posts/:id', (c) =>
  c.text(`${c.req.param('id')} is deleted!`)
)

返回 HTML

你可以使用 html HelperJSX 语法编写 HTML。如果你想使用 JSX,将文件重命名为 src/index.tsx 并进行配置(请查阅各个运行时的文档,因为配置方式有所不同)。下面是使用 JSX 的一个示例。

tsx
const View = () => {
  return (
    <html>
      <body>
        <h1>Hello Hono!</h1>
      </body>
    </html>
  )
}

app.get('/page', (c) => {
  return c.html(<View />)
})

返回原始 Response

你也可以返回原始的 Response 对象。

ts
app.get('/', () => {
  return new Response('Good morning!')
})

使用中间件

中间件可以为你完成繁重的工作。 例如,添加 Basic 认证。

ts
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。 Hono 还提供了使用外部库的第三方中间件,例如 GraphQL Server 和 Firebase Auth。 而且,你可以创建自己的中间件。

适配器

Hono 提供了适配器(Adapter)用于处理平台相关的功能,例如,处理静态文件或 WebSocket。 例如,要在 Cloudflare Workers 中处理 WebSocket,导入 hono/cloudflare-workers

ts
import { upgradeWebSocket } from 'hono/cloudflare-workers'

app.get(
  '/ws',
  upgradeWebSocket((c) => {
    // ...
  })
)

下一步

大多数代码可以在任何平台上工作,但是每个平台都有各自的指南。 例如,如何搭建项目或如何部署。 请查看你想要使用的平台的页面,以了解如何创建你的应用!

在 MIT 许可证下发布。