Conceptos básicos de Hono
10 ejemplos para construir APIs con Hono en Node.js - 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para construir APIs con Hono en Node.js - 7 básicos y 3 intermedios.
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 decisiones de portabilidad en tiempo de ejecución, consulta Hono en 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 es el objeto Contexto con helpers para tipos de respuestaapp.fetch es un manejador fetch estándar web@hono/node-server conecta Hono con Node HTTPimport { Hono } from "hono";
const app = new Hono();
app.get("/users", (c) => {
return c.json([{ id: 1, name: "Ada Lovelace" }]);
});c.json() establece 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 rutac.req.query() para cadenas 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() analiza el cuerpo de forma así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 con ámbito de rutaawait next() para continuar la cadenalogger() incorporado para el registro de solicitudesimport { 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 rutasimport { 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 errores operativos con códigos de estadoapp.onError() para el manejo centralizado de erroresimport { 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());helmetimport { 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 con Honoc.req.valid("json") devuelve datos tipados y validadosHono para portabilidad en el edge, huella diminuta o alineación con los estándares web. Express/Fastify para un ecosistema Node más grande. Consulta Lista de verificación de selección de framework.
Sí, a través de @hono/node-server. El mismo código Hono puede desplegarse en Cloudflare Workers.
Sí. Se utiliza en producción en Cloudflare Workers y Node. Ecosistema más pequeño que Express/Fastify.
~14KB minificado frente a Express ~200KB+ con middleware. Importa para los arranques en frío del edge.
Soporte de TypeScript de primera clase con contexto tipado, validadores y parámetros de ruta.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026