Noções Básicas de Hono
10 exemplos para construir APIs com Hono no Node.js - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para construir APIs com Hono no Node.js - 7 básicos e 3 intermediários.
mkdir hono-api && cd hono-api
npm init -y
npm pkg set type=module
npm install hono @hono/node-server
npm install -D typescript@5.6 tsxPara decisões de portabilidade de tempo de execução, veja Hono no Node vs Edge.
import { Hono } from "hono";
import { serve } from "@hono/node-server";
const app = new Hono();
app.get("/", (c) => c.text("Hello from Hono\n"));
serve({ fetch: app.fetch, port: 3000 });c é o objeto Context com helpers para tipos de respostaapp.fetch é um manipulador fetch Padrão Web@hono/node-server faz a ponte entre Hono e o HTTP do Nodeimport { Hono } from "hono";
const app = new Hono();
app.get("/users", (c) => {
return c.json([{ id: 1, name: "Ada Lovelace" }]);
});c.json() define Content-Type: application/jsonimport { Hono } from "hono";
const app = new Hono();
app.get("/users/:id", (c) => {
const id = c.req.param("id");
const include = c.req.query("include");
return c.json({ id, include });
});c.req.param() para parâmetros de caminhoc.req.query() para strings de consultaimport { Hono } from "hono";
const app = new Hono();
app.post("/users", async (c) => {
const body = await c.req.json<{ name: string; email: string }>();
return c.json({ id: "1", ...body }, 201);
});c.req.json() analisa o corpo de forma assíncronac.json()import { Hono } from "hono";
import { logger } from "hono/logger";
const app = new Hono();
app.use("*", logger());
app.use("/api/*", async (c, next) => {
const start = Date.now();
await next();
c.header("X-Response-Time", `${Date.now() - start}ms`);
});app.use(path, middleware) para middleware com escopo de caminhoawait next() para continuar a cadeialogger() embutido para log de requisiçõesimport { Hono } from "hono";
const users = new Hono();
users.get("/", (c) => c.json([]));
users.get("/:id", (c) => c.json({ id: c.req.param("id") }));
const app = new Hono();
app.route("/users", users);app.route(prefix, subApp) monta grupos de rotasimport { Hono } from "hono";
import { HTTPException } from "hono/http-exception";
const app = new Hono();
app.get("/users/:id", (c) => {
const id = c.req.param("id");
if (id === "999") throw new HTTPException(404, { message: "Not found" });
return c.json({ id });
});
app.onError((err, c) => {
if (err instanceof HTTPException) {
return c.json({ error: err.message }, err.status);
}
return c.json({ error: "Internal server error" }, 500);
});HTTPException para erros operacionais com códigos de statusapp.onError() para tratamento centralizado de errosimport { Hono } from "hono";
import { createMiddleware } from "hono/factory";
type Variables = { userId: string };
const app = new Hono<{ Variables: Variables }>();
const auth = createMiddleware<{ Variables: Variables }>(async (c, next) => {
c.set("userId", "user-42");
await next();
});
app.use("/api/*", auth);
app.get("/api/me", (c) => c.json({ userId: c.get("userId") }));Variables para c.set() / c.get()createMiddleware para fábricas de middleware tipadasimport { Hono } from "hono";
import { cors } from "hono/cors";
import { secureHeaders } from "hono/secure-headers";
const app = new Hono();
app.use("*", cors({ origin: "https://app.example.com" }));
app.use("*", secureHeaders());helmet necessáriaimport { Hono } from "hono";
import { zValidator } from "@hono/zod-validator";
import { z } from "zod";
const app = new Hono();
const schema = z.object({
name: z.string().min(1),
email: z.string().email(),
});
app.post("/users", zValidator("json", schema), (c) => {
const body = c.req.valid("json");
return c.json({ id: "1", ...body }, 201);
});@hono/zod-validator integra Zod com Honoc.req.valid("json") retorna dados tipados e validadosHono para portabilidade de edge, pegada mínima ou alinhamento com Padrões Web. Express/Fastify para o ecossistema Node maior. Veja Checklist de Seleção de Framework.
Sim, via @hono/node-server. O mesmo código Hono pode ser implantado em Cloudflare Workers.
Sim. Usado em produção no Cloudflare Workers e Node. Ecossistema menor que Express/Fastify.
~14KB minificado vs Express ~200KB+ com middleware. Importa para cold starts de edge.
Suporte TypeScript de primeira classe com contexto tipado, validadores e parâmetros de rota.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026