Closed15

HonoのCloudflare Pagesテンプレートのチュートリアルを触る

おっびおっび
# gardenia_710 @ makkubukku in ~/dev [20:57:09]
$ npm create hono@latest hono-pages
Need to install the following packages:
create-hono@0.3.2
Ok to proceed? (y) y

create-hono version 0.3.2
✔ Using target directory … hono-pages
✔ Which template do you want to use? › cloudflare-pages
cloned honojs/starter#main to /Users/gardenia_710dev/hono-pages
✔ Copied project files
おっびおっび
$ npm install
npm WARN deprecated rollup-plugin-inject@3.0.2: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead

added 85 packages, and audited 86 packages in 20s

9 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
おっびおっび

npm installする前はこんな感じだった

$ tree
.
├── README.md
├── package-lock.json
├── package.json
├── public
│   └── static
│       └── style.css
├── src
│   ├── index.tsx
│   └── renderer.tsx
├── tsconfig.json
└── vite.config.ts

4 directories, 8 files
おっびおっび
npm run dev

をするとviteが起動した。

localhost:5173へアクセスすると。

おっびおっび

indexのソースコードはこんな感じ。

src/index.tsx
import { Hono } from 'hono'
import { renderer } from './renderer'

const app = new Hono()

app.get('*', renderer)

app.get('/', (c) => {
  return c.render(<h1>Hello!</h1>)
})

export default app
おっびおっび

コードを変更。

src/index.tsx
return c.render(<h1>Hello! World!</h1>)

にすると。

こうなる。
上書き保存したときにホットリロードが効くので便利

おっびおっび
npm run deploy

をするとCloudflareのログインが求められるのでログインする

おっびおっび
Successfully logged in.
No project selected. Would you like to create one or use an existing project?
❯ Create a new project
  Use an existing project
✔ Enter the name of your new project: … hono-pages
✔ Enter the production branch name: … main
✨ Successfully created the 'hono-pages' project.
🌍  Uploading... (1/1)

✨ Success! Uploaded 1 files (1.15 sec)

✨ Compiled Worker successfully
✨ Uploading Worker bundle
✨ Deployment complete! Take a peek over at https://43636d3b.hono-pages-dy9.pages.dev

設定完了後URLにアクセス

おっびおっび
src/index.tsx
app.get("/api", (c) => {
  return c.json({ message: "Hello! World!" });
});

上記を追記

おっびおっび
app.get("/api/user/:id", (c) => {
  const id = c.req.param("id");
  return c.json({ id: id });
});

これを追加して、 /api/user/3 へアクセスすると。

おっびおっび
app.get("/api/user/:id", (c) => {
  const id = c.req.param("id");
  const name = c.req.query("name");
  return c.json({ id: id, name: name });
});

これに変更して、 /api/user/3?name=hogehoge にアクセス。

ちゃんと反映される

おっびおっび

pagesの方はなんとなくわかった。
Workersの方でD1と一緒になにかする方を次はやってみる。

このスクラップは2024/01/10にクローズされました