Servidores Customizados
Use AzuraJS com Bun, Deno, Cloudflare Workers e muito mais
Servidores Customizados 🌐
AzuraJS pode ser usado com qualquer servidor que suporte a Web Fetch API, assim como o Hono! Isso dá flexibilidade para deployar no Bun, Deno, Cloudflare Workers, Vercel Edge Functions e muito mais.
Usando com Bun 🍞
Bun fornece um servidor HTTP nativo super rápido. Use AzuraJS com Bun.serve:
TypeScript
import { AzuraClient } from "azurajs";
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({ message: "Olá do AzuraJS no Bun!" });
});
app.get("/user/:id", (req, res) => {
res.json({
userId: req.params.id,
runtime: "Bun"
});
});
app.post("/data", (req, res) => {
res.json({
received: req.body,
timestamp: Date.now()
});
});
// Use com o servidor nativo do Bun
const server = Bun.serve({
port: process.env.PORT || 3000,
fetch: app.fetch.bind(app),
});
console.log(`🚀 Servidor rodando em http://localhost:${server.port}`);JavaScript
const { AzuraClient } = require("azurajs");
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({ message: "Olá do AzuraJS no Bun!" });
});
app.get("/user/:id", (req, res) => {
res.json({
userId: req.params.id,
runtime: "Bun"
});
});
app.post("/data", (req, res) => {
res.json({
received: req.body,
timestamp: Date.now()
});
});
// Use com o servidor nativo do Bun
const server = Bun.serve({
port: process.env.PORT || 3000,
fetch: app.fetch.bind(app),
});
console.log(`🚀 Servidor rodando em http://localhost:${server.port}`);Execute:
bun run bun-server.tsPor que usar Bun?
- ⚡ 3x mais rápido que Node.js
- 🚀 Suporte nativo a TypeScript
- 📦 Bundler integrado e test runner
- 🔥 Hot reload pronto para uso
Usando com Deno 🦕
Deno é um runtime seguro para JavaScript e TypeScript. Use AzuraJS com Deno.serve:
TypeScript
import { AzuraClient } from "azurajs";
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({ message: "Olá do AzuraJS no Deno!" });
});
app.get("/api/:name", (req, res) => {
res.json({
greeting: `Olá ${req.params.name}!`,
runtime: "Deno"
});
});
// Use com Deno.serve
Deno.serve({ port: 3000 }, app.fetch.bind(app));
console.log("🦕 Servidor rodando em http://localhost:3000");JavaScript
const { AzuraClient } = require("azurajs");
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({ message: "Olá do AzuraJS no Deno!" });
});
app.get("/api/:name", (req, res) => {
res.json({
greeting: `Olá ${req.params.name}!`,
runtime: "Deno"
});
});
// Use com Deno.serve
Deno.serve({ port: 3000 }, app.fetch.bind(app));
console.log("🦕 Servidor rodando em http://localhost:3000");Execute:
deno run --allow-net --allow-read deno-server.tsPor que usar Deno?
- 🔒 Seguro por padrão - Permissões explícitas necessárias
- 📦 Sem package.json - Imports diretos por URL
- 🌐 Web standards - APIs compatíveis
- ⚡ Startup rápido - Runtime otimizado
Usando com Cloudflare Workers ☁️
Deploy globalmente na rede edge da Cloudflare:
TypeScript
import { AzuraClient } from "azurajs";
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({
message: "Olá da Edge!",
location: "Cloudflare Workers"
});
});
app.get("/api/:id", (req, res) => {
res.json({
id: req.params.id,
deployed: "globalmente"
});
});
// Export para Cloudflare Workers
export default {
fetch: app.fetch.bind(app),
};JavaScript
const { AzuraClient } = require("azurajs");
const app = new AzuraClient();
app.get("/", (req, res) => {
res.json({
message: "Olá da Edge!",
location: "Cloudflare Workers"
});
});
app.get("/api/:id", (req, res) => {
res.json({
id: req.params.id,
deployed: "globalmente"
});
});
// Export para Cloudflare Workers
module.exports = {
fetch: app.fetch.bind(app),
};Por que usar Cloudflare Workers?
- 🌍 Deploy global - 200+ localizações edge
- ⚡ 0ms cold starts - Respostas instantâneas
- 💰 Tier grátis - 100k requisições/dia
- 🔐 Segurança integrada - Proteção DDoS
Usando com Node.js (Padrão) 🟢
AzuraJS inclui um servidor HTTP Node.js integrado:
TypeScript
import { AzuraClient, applyDecorators } from "azurajs";
import { UserController } from "./controllers/UserController";
const app = new AzuraClient();
// Rota simples
app.get("/", (req, res) => {
res.json({ message: "Olá do Node.js!" });
});
// Ou use controllers
applyDecorators(app, [UserController]);
// Servidor HTTP Node.js integrado
await app.listen(3000);JavaScript
const { AzuraClient, applyDecorators } = require("azurajs");
const { UserController } = require("./controllers/UserController");
const app = new AzuraClient();
// Rota simples
app.get("/", (req, res) => {
res.json({ message: "Olá do Node.js!" });
});
// Ou use controllers
applyDecorators(app, [UserController]);
// Servidor HTTP Node.js integrado
app.listen(3000);Execute:
node --import tsx node-server.ts
# ou com Bun
bun run node-server.tsPor que usar Node.js?
- 📦 Maior ecossistema - Pacotes npm
- 🔧 Ferramentas maduras - Bem estabelecido
- 🏢 Pronto para produção - Testado em batalha
- 🤝 Amplo suporte - Maioria dos provedores de hosting
Vercel Edge Functions 🔺
Deploy na rede edge da Vercel:
import { AzuraClient } from "azurajs";
const app = new AzuraClient();
app.get("/api/hello", (req, res) => {
res.json({ message: "Olá da Vercel Edge!" });
});
export default async function handler(request: Request) {
return app.fetch(request);
}
export const config = {
runtime: "edge",
};Comparação de Performance 📊
| Runtime | Cold Start | Throughput | Deploy |
|---|---|---|---|
| Bun | ~5ms | ⭐⭐⭐⭐⭐ | Local/VPS |
| Node.js | ~50ms | ⭐⭐⭐⭐ | Qualquer lugar |
| Deno | ~10ms | ⭐⭐⭐⭐ | Deno Deploy |
| Cloudflare | 0ms | ⭐⭐⭐⭐⭐ | Global Edge |
| Vercel Edge | 0ms | ⭐⭐⭐⭐ | Vercel |
Exemplo Completo 🎯
Aqui está um exemplo completo que funciona em qualquer lugar:
import { AzuraClient } from "azurajs";
import { Controller, Get, Post, Body, Param, Res } from "azurajs/decorators";
import type { ResponseServer } from "azurajs";
@Controller("/api")
class ApiController {
@Get("/")
root(@Res() res: ResponseServer) {
res.json({
message: "API Universal do AzuraJS",
runtime: typeof Bun !== "undefined" ? "Bun" :
typeof Deno !== "undefined" ? "Deno" : "Node.js"
});
}
@Get("/users/:id")
getUser(@Param("id") id: string, @Res() res: ResponseServer) {
res.json({
id: Number(id),
name: `Usuário ${id}`
});
}
@Post("/users")
createUser(@Body() body: any, @Res() res: ResponseServer) {
res.status(201).json({
id: Date.now(),
...body
});
}
}
const app = new AzuraClient();
applyDecorators(app, [ApiController]);
// Escolha seu runtime:
// Bun
if (typeof Bun !== "undefined") {
Bun.serve({ port: 3000, fetch: app.fetch.bind(app) });
}
// Deno
else if (typeof Deno !== "undefined") {
Deno.serve({ port: 3000 }, app.fetch.bind(app));
}
// Node.js (padrão)
else {
await app.listen(3000);
}Dicas de Configuração ⚙️
Ao usar servidores customizados, você pode desabilitar algumas funcionalidades integradas:
import type { ConfigTypes } from "azurajs/config";
const config: ConfigTypes = {
server: {
port: 3000,
cluster: false, // Desabilite para Bun/Deno/Edge
},
logging: {
enabled: true,
showDetails: false, // Menos verboso para edge
},
};
export default config;Melhores Práticas ✨
Use Bun para desenvolvimento - Hot reload e startup mais rápidos
Use Edge para produção - Deploy global com 0ms cold starts
Teste no Node.js - Garanta compatibilidade antes do deploy
Desabilite cluster mode - Não é necessário com servidores customizados
