AzuraJS Logo
AzuraJSFramework
v2.2 Beta

Uso com JavaScript

Usando AzuraJS com JavaScript puro

Uso com JavaScript 📝

AzuraJS funciona perfeitamente com JavaScript puro! Embora o framework seja TypeScript-first, você pode usar todos os recursos com JavaScript usando a API funcional.

Por que JavaScript? 🤔

  • Simplicidade - Não precisa de transpilação para projetos simples
  • Familiar - API similar ao Express que desenvolvedores JavaScript conhecem
  • Flexível - Use decorators em TypeScript, funções em JavaScript
  • Progressivo - Comece com JS, migre para TS quando necessário

Início Rápido 🚀

1. Instalar AzuraJS

npm install azurajs

2. Criar Configuração

azura.config.js
const config = {
  environment: "development",
  server: {
    port: 3000,
    cluster: false,
  },
  logging: {
    enabled: true,
    showDetails: true,
  },
};

export default config;

Ou com CommonJS:

azura.config.js
const config = {
  environment: "development",
  server: {
    port: 3000,
  },
};

module.exports = config;

3. Criar Seu Servidor

index.js
const { AzuraClient } = require("azurajs");
const { createLoggingMiddleware } = require("azurajs/middleware");

const app = new AzuraClient();
const logger = createLoggingMiddleware(app.getConfig());
app.use(logger);

app.get("/", (req, res) => {
  res.json({ message: "Olá do JavaScript!" });
});

app.listen();

4. Executar

bun run index.js
# ou
node index.js

API Funcional 🔧

Definindo Rotas

const { AzuraClient } = require("azurajs");

const app = new AzuraClient();

// Rota GET
app.get("/users", (req, res) => {
  res.json({ users: [] });
});

// Rota POST
app.post("/users", (req, res) => {
  const body = req.body;
  res.status(201).json({ created: body });
});

// Rota PUT
app.put("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, updated: true });
});

// Rota DELETE
app.delete("/users/:id", (req, res) => {
  const { id } = req.params;
  res.status(204).send();
});

Parâmetros de Requisição

// Parâmetros de rota
app.get("/users/:id/posts/:postId", (req, res) => {
  const { id, postId } = req.params;
  res.json({ userId: id, postId });
});

// Parâmetros de query
app.get("/search", (req, res) => {
  const { q, limit = 10, page = 1 } = req.query;
  res.json({ query: q, limit: Number(limit), page: Number(page) });
});

// Corpo da requisição
app.post("/data", (req, res) => {
  const body = req.body;
  res.json({ received: body });
});

// Headers
app.get("/info", (req, res) => {
  const userAgent = req.headers["user-agent"];
  res.json({ userAgent });
});

Middleware em JavaScript 🔌

Middleware Básico

// Log simples
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});

// Tempo de requisição
app.use((req, res, next) => {
  const start = Date.now();
  next();
  const duration = Date.now() - start;
  console.log(`Requisição levou ${duration}ms`);
});

Middleware de Autenticação

const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization;
  
  if (!token) {
    return res.status(401).json({ error: "Sem token" });
  }
  
  // Verificar token
  req.user = { id: 1, name: "Usuário" };
  next();
};

// Aplicar em rotas específicas
app.get("/protected", authMiddleware, (req, res) => {
  res.json({ user: req.user });
});

Exemplo Completo 🎯

API REST completa em JavaScript:

server.js
import { AzuraClient } from "azurajs";
import { createLoggingMiddleware } from "azurajs/middleware";

const app = new AzuraClient();
const logger = createLoggingMiddleware(app.getConfig());
app.use(logger);

// Banco de dados em memória
const users = [
  { id: 1, name: "Alice", email: "[email protected]" },
  { id: 2, name: "Bob", email: "[email protected]" },
];

let nextId = 3;

// Listar todos os usuários
app.get("/api/users", (req, res) => {
  const { page = 1, limit = 10 } = req.query;
  const startIndex = (page - 1) * limit;
  const endIndex = startIndex + Number(limit);
  
  res.json({
    data: users.slice(startIndex, endIndex),
    pagination: {
      page: Number(page),
      limit: Number(limit),
      total: users.length,
    },
  });
});

// Buscar usuário por ID
app.get("/api/users/:id", (req, res) => {
  const { id } = req.params;
  const user = users.find(u => u.id === Number(id));
  
  if (!user) {
    return res.status(404).json({ error: "Usuário não encontrado" });
  }
  
  res.json({ data: user });
});

// Criar usuário
app.post("/api/users", (req, res) => {
  const { name, email } = req.body;
  
  if (!name || !email) {
    return res.status(400).json({ error: "Nome e email obrigatórios" });
  }
  
  const user = {
    id: nextId++,
    name,
    email,
    createdAt: new Date().toISOString(),
  };
  
  users.push(user);
  res.status(201).json({ data: user });
});

// Atualizar usuário
app.put("/api/users/:id", (req, res) => {
  const { id } = req.params;
  const { name, email } = req.body;
  
  const user = users.find(u => u.id === Number(id));
  
  if (!user) {
    return res.status(404).json({ error: "Usuário não encontrado" });
  }
  
  if (name) user.name = name;
  if (email) user.email = email;
  user.updatedAt = new Date().toISOString();
  
  res.json({ data: user });
});

// Deletar usuário
app.delete("/api/users/:id", (req, res) => {
  const { id } = req.params;
  const index = users.findIndex(u => u.id === Number(id));
  
  if (index === -1) {
    return res.status(404).json({ error: "Usuário não encontrado" });
  }
  
  users.splice(index, 1);
  res.status(204).send();
});

// Health check
app.get("/health", (req, res) => {
  res.json({ status: "saudável", timestamp: new Date().toISOString() });
});

// Iniciar servidor
await app.listen();

Melhores Práticas ✨

Use const - Prefira const ao invés de let quando possível

Desestruture - Use desestruturação para código mais limpo: const { id } = req.params

Async/await - Use async/await ao invés de callbacks

Próximos Passos 📚

On this page