Honoå®è£ Tipséð

Honoã§ã®CORSèšå®
Honoã§ã®CORSïŒCross-Origin Resource SharingïŒã®èšå®æ¹æ³ã«ã€ããŠèª¬æããŸãã
æé
-
CORSããã«ãŠã§ã¢ã®ã€ã³ããŒã
ãŸãã
hono/cors
ããCORSããã«ãŠã§ã¢ãã€ã³ããŒãããŸããimport { cors } from 'hono/cors'
-
ã¢ããªã±ãŒã·ã§ã³ãžã®ããã«ãŠã§ã¢ã®é©çš
Honoã¢ããªã±ãŒã·ã§ã³ã§ã
app.use
ã䜿çšããŠCORSããã«ãŠã§ã¢ãé©çšããŸããapp.use('*', cors())
äžèšã®äŸã§ã¯ããã¹ãŠã®ã«ãŒãã«å¯ŸããŠCORSèšå®ãé©çšããŠããŸãã
-
ãªãã·ã§ã³ã®èšå®ïŒå¿ èŠã«å¿ããŠïŒ
ç¹å®ã®ãªãªãžã³ãã¡ãœãããèš±å¯ãããå Žåã¯ããªãã·ã§ã³ãæå®ã§ããŸãã
app.use('*', cors({ origin: 'https://example.com', allowMethods: ['GET', 'POST', 'PUT', 'DELETE'], allowHeaders: ['Content-Type', 'Authorization'], maxAge: 600, }))
-
origin
: èš±å¯ãããªãªãžã³ïŒ'*'
ã§å šãŠã®ãªãªãžã³ãèš±å¯ïŒ -
allowMethods
: èš±å¯ããHTTPã¡ãœããã®ãªã¹ã -
allowHeaders
: èš±å¯ããHTTPããããŒã®ãªã¹ã -
maxAge
: ããªãã©ã€ããªã¯ãšã¹ãã®çµæããã£ãã·ã¥ããæéïŒç§ïŒ
-
ãã«ã³ãŒãäŸ
import { Hono } from 'hono'
import { cors } from 'hono/cors'
const app = new Hono()
// CORSããã«ãŠã§ã¢ã®é©çš
app.use('*', cors({
origin: '*',
allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization'],
maxAge: 600,
}))
// ã«ãŒããã³ãã©ãŒ
app.get('/', (c) => c.text('Hello World!'))
export default app
è£è¶³
-
ããã©ã«ãèšå®:
cors()
ããªãã·ã§ã³ãªãã§äœ¿çšãããšãããã©ã«ãã§ãã¹ãŠã®ãªãªãžã³ãšã¡ãœãããèš±å¯ãããŸãã - ã»ãã¥ãªãã£: æ¬çªç°å¢ã§ã¯ãå¿ èŠãªãªãªãžã³ãšã¡ãœããã®ã¿ãèš±å¯ããããã«èšå®ããããšãæšå¥šããŸãã
ãŸãšã
Honoã§CORSãèšå®ããã«ã¯ãhono/cors
ããããã«ãŠã§ã¢ãã€ã³ããŒãããapp.use
ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã«é©çšããŸããå¿
èŠã«å¿ããŠããªãã·ã§ã³ã§è©³çްãªèšå®ãè¡ãããšãã§ããŸãã

Hono API ã«ãŒãã£ã³ã°

Honoã§ã®ç°å¢å€æ°ã«ã€ããŠ
QïŒ Honoã§ wranglerã䜿çšããå Žåãdotenvã¯äœ¿ãå¿ èŠããªãã§ããïŒ
GPT AnswerïŒ
HonoãCloudflare Workersäžã§äœ¿çšããéãç°å¢å€æ°ã®ç®¡çã«ã¯wrangler.toml
ãã¡ã€ã«ãå©çšããŸãããã®ãã¡ã€ã«ã®[vars]
ã»ã¯ã·ã§ã³ã§ç°å¢å€æ°ãå®çŸ©ããã¢ããªã±ãŒã·ã§ã³å
ã§c.env
ãéããŠã¢ã¯ã»ã¹ã§ããŸãã
äžæ¹ãdotenv
ã¯äž»ã«Node.jsç°å¢ã§.env
ãã¡ã€ã«ããç°å¢å€æ°ãèªã¿èŸŒãããã®ã©ã€ãã©ãªã§ãã
Cloudflare Workersã®éçºç°å¢ã§ã¯ãdotenv
ã䜿çšãã代ããã«ãwrangler.toml
ã.dev.vars
ãã¡ã€ã«ãçšããŠç°å¢å€æ°ãèšå®ããŸãã
ãããã£ãŠãHonoãCloudflare Workersäžã§äœ¿çšããå Žåãdotenv
ã䜿çšããå¿
èŠã¯ãããŸããã
éçºç°å¢ã§ãæ¬çªç°å¢ã§ããwrangler.toml
ã.dev.vars
ãéããŠç°å¢å€æ°ã管çããããšãæšå¥šãããŸãã
wrangler.toml
âïž Honoã§ã®ç°å¢å€æ°ã®åãæ±ãã«ã€ããŠ
wrangler.toml
ãã¡ã€ã«ã§å®çŸ©ããç°å¢å€æ°ã Hono ã¢ããªã±ãŒã·ã§ã³å
ã§äœ¿çšããã«ã¯ã以äžã®æé ãè¡ããŸãã
-
wrangler.toml
ã§ç°å¢å€æ°ãå®çŸ©ãã:
wrangler.toml
ãã¡ã€ã«ã®[vars]
ã»ã¯ã·ã§ã³ã«ç°å¢å€æ°ãèšå®ããŸãã
[vars]
MY_VARIABLE = "your_value"
-
Hono ã¢ããªã±ãŒã·ã§ã³ã§ç°å¢å€æ°ã䜿çšãã:
Hono ã®ã³ã³ããã¹ããªããžã§ã¯ãc
ã®env
ããããã£ãéããŠãç°å¢å€æ°ã«ã¢ã¯ã»ã¹ã§ããŸããimport { Hono } from 'hono'; const app = new Hono(); app.get('/', (c) => { const myVariable = c.env.MY_VARIABLE; return c.text(`The value of MY_VARIABLE is: ${myVariable}`); }); export default app;
ãã®ããã«ããŠãc.env.MY_VARIABLE
ãéã㊠wrangler.toml
ã§å®çŸ©ããç°å¢å€æ° MY_VARIABLE
ã®å€ãååŸã§ããŸãã
詳现ã«ã€ããŠã¯ãHono ã®å ¬åŒããã¥ã¡ã³ãã®ãBindingsãã»ã¯ã·ã§ã³ããåç §ãã ããã

wrangler.tomlãã¡ã€ã« ã® dev ãš prod 䜿ãåãã«ã€ããŠ
QïŒ wrangler.tomlãã¡ã€ã« ã® dev ãš prod çšã®ãã¡ã€ã«ã®äœ¿ãåãã«ã€ã㊠Best ãã©ã¯ãã£ã¹ãæããŠãã ããã
GPT AnswerïŒ
wrangler.toml
ãã¡ã€ã«ã§éçºïŒdevïŒç°å¢ãšæ¬çªïŒprodïŒç°å¢ãé©åã«äœ¿ãåããããã®ãã¹ããã©ã¯ãã£ã¹ã¯ãç°å¢ããšã®èšå®ãåäžã® wrangler.toml
ãã¡ã€ã«å
ã§ç®¡çããããšã§ããããã«ãããèšå®ã®äžå
管çãå¯èœãšãªããç°å¢éã®å·®ç°ãæç¢ºã«å®çŸ©ã§ããŸãã
å ·äœçãªæé :
-
ç°å¢ããšã®ã»ã¯ã·ã§ã³ãå®çŸ©ãã:
wrangler.toml
å ã§[env.{environment_name}]
ã»ã¯ã·ã§ã³ã䜿çšããŠãåç°å¢åºæã®èšå®ãèšè¿°ããŸããname = "my-worker" main = "src/index.js" compatibility_date = "2024-11-03" [env.dev] name = "my-worker-dev" route = { pattern = "dev.example.com/*", zone_name = "example.com" } vars = { API_URL = "https://api.dev.example.com" } [env.prod] name = "my-worker-prod" route = { pattern = "example.com/*", zone_name = "example.com" } vars = { API_URL = "https://api.example.com" }
ãã®ããã«ã
[env.dev]
ãš[env.prod]
ã»ã¯ã·ã§ã³ãå®çŸ©ããåç°å¢ã«å¿ããèšå®ãèšè¿°ããŸãã -
ç°å¢åºæã®å€æ°ãèšå®ãã:
åç°å¢ã»ã¯ã·ã§ã³å ã§vars
ã䜿çšããŠãç°å¢åºæã®å€æ°ãå®çŸ©ããŸãã[env.dev.vars] API_KEY = "dev-api-key" [env.prod.vars] API_KEY = "prod-api-key"
ããã«ãããéçºç°å¢ãšæ¬çªç°å¢ã§ç°ãªã API ããŒãªã©ã®å€æ°ãèšå®ã§ããŸãã
-
ãããã€æã«ç°å¢ãæå®ãã:
wrangler
ã³ãã³ãã®--env
ãªãã·ã§ã³ã䜿çšããŠããããã€å ã®ç°å¢ãæå®ããŸãã# éçºç°å¢ãžã®ããã〠wrangler deploy --env dev # æ¬çªç°å¢ãžã®ããã〠wrangler deploy --env prod
ãã®ããã«ããŠãæå®ããç°å¢ã®èšå®ãé©çšãããŸãã
泚æç¹:
- ç°å¢ããšã®èšå®ã
[env.{environment_name}]
ã»ã¯ã·ã§ã³ã§å®çŸ©ããããšã§ãèšå®ã®éè€ãé¿ãã管çã容æã«ãªããŸãã - æ©å¯æ
å ±ïŒäŸ: API ããŒïŒã¯ã
wrangler secret
ã³ãã³ãã䜿çšããŠå®å šã«ç®¡çããããšãæšå¥šãããŸãã
ãã®æ¹æ³ã«ãããéçºç°å¢ãšæ¬çªç°å¢ã®èšå®ãäžå çã«ç®¡çããç°å¢éã®åãæ¿ããã¹ã ãŒãºã«è¡ãããšãã§ããŸãã

Hono ã® env() ã§ç°å¢å€æ°ã䜿çšãã
ãã®env()颿°ã¯ãCloudflare Workers ã®ãã€ã³ãã£ã³ã°ãè¶
ããŠãããŸããŸãªã©ã³ã¿ã€ã éã§ç°å¢å€æ°ãååŸããã®ã«åœ¹ç«ã¡ãŸãã
ååŸã§ããå€ã¯ãenv(c)ã©ã³ã¿ã€ã ããšã«ç°ãªãå ŽåããããŸãã
import { env } from 'hono/adapter'
app.get('/env', (c) => {
// NAME is process.env.NAME on Node.js or Bun
// NAME is the value written in `wrangler.toml` on Cloudflare
const { NAME } = env<{ NAME: string }>(c)
return c.text(NAME)
})

Zod validator middleware for Hono