Faça deploy de uma API rápida e leve com Hono na Veloz.
Pré-requisitos
- Node.js 18+ instalado
- Um projeto Hono (ou vamos criar um)
1. Criar o projeto
npm create hono@latest meu-api
cd meu-api
npm installEscolha o template nodejs quando perguntado.
2. Estrutura do projeto
meu-api/
├── src/
│ └── index.ts
├── package.json
└── tsconfig.json
// src/index.ts
import { Hono } from "hono";
import { serve } from "@hono/node-server";
const app = new Hono();
app.get("/", (c) => c.json({ message: "Olá da Veloz!" }));
app.get("/users", (c) => {
return c.json({ users: [{ id: 1, name: "Jean" }] });
});
app.post("/users", async (c) => {
const body = await c.req.json();
return c.json({ created: body }, 201);
});
serve({ fetch: app.fetch, port: Number(process.env.PORT) || 3000 });Importante: Use
process.env.PORT || 3000para que a Veloz possa configurar a porta.
3. Package.json
Certifique-se de ter os scripts de build e start:
{
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts"
}
}4. Deploy
npm install -g onveloz
veloz login
veloz deployℹ Framework detectado: Hono
ℹ Build: npm run build
ℹ Start: node dist/index.js
ℹ Porta: 3000
? Confirmar e fazer deploy? (Y/n)
✓ Build concluído em 5s
✓ Deploy concluído!
✓ https://meu-api.onveloz.com
Com banco de dados
PostgreSQL (Prisma)
npm install prisma @prisma/client
npx prisma init# Definir a URL do banco
veloz env set DATABASE_URL=postgres://user:pass@host:5432/mydb// src/index.ts
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
app.get("/users", async (c) => {
const users = await prisma.user.findMany();
return c.json({ users });
});Drizzle
npm install drizzle-orm postgresimport { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
const sql = postgres(process.env.DATABASE_URL!);
const db = drizzle(sql);Middleware
Hono tem middleware poderoso built-in:
import { cors } from "hono/cors";
import { logger } from "hono/logger";
import { bearerAuth } from "hono/bearer-auth";
// CORS para o frontend
app.use(
"/api/*",
cors({
origin: "https://meuapp.com",
}),
);
// Logger
app.use("*", logger());
// Auth para rotas protegidas
app.use("/admin/*", bearerAuth({ token: process.env.ADMIN_TOKEN! }));Variáveis de ambiente
veloz env set DATABASE_URL=postgres://...
veloz env set JWT_SECRET=meu-segredo
veloz env set ADMIN_TOKEN=token-adminAcesse via process.env:
const secret = process.env.JWT_SECRET;Com Zod validation
import { zValidator } from "@hono/zod-validator";
import { z } from "zod";
const createUserSchema = z.object({
name: z.string().min(2),
email: z.string().email(),
});
app.post("/users", zValidator("json", createUserSchema), async (c) => {
const data = c.req.valid("json");
// data é tipado: { name: string, email: string }
return c.json({ created: data }, 201);
});Monorepo: Frontend + API
Estrutura típica de monorepo com Hono API + frontend:
meu-projeto/
├── apps/
│ ├── web/ ← Next.js / Vite
│ └── api/ ← Hono
└── packages/
└── shared/ ← Types compartilhados
veloz deploy
# Selecione ambos: web e apiCada serviço recebe sua própria URL:
web → meu-projeto-web.onveloz.com
api → meu-projeto-api.onveloz.com
Próximos passos
- Deploy Next.js — Frontend para acompanhar sua API
- Variáveis de Ambiente — Gerenciar secrets
- Logs — Monitorar sua API