← Todos os pacotes

xs-server

v1.0.0 por ? 4 downloads

HTTP server suite: router, CORS, sessions, rate limiting, WebSocket, HTML and EJS templating

xs install xs-server
serverhttproutercorssessionratelimitwebsockethtmlejstemplating

README

xs-server

Suíte completa para servidor HTTP e networking em um único pacote: router, CORS, sessões, rate limit, WebSocket, HTML e EJS.

Router

  • router-cria() — novo router
  • router-get(router, caminho, handler) / router-post / router-put / router-delete
  • router-rota(router, methodo, caminho, handler) — método arbitrário (* para todos)
  • router-testa(router, methodo, caminho) — casa rota, devolve { rota, params } ou nulo
  • router-executa(router, req, res) — despacha e devolve { ok } ou nulo (404)

Caminhos suportam :param e wildcard *.

CORS

  • cors-padrao() / cors-headers(opcoes) — cabeçalhos CORS
  • server-cors-aplica(opcoes, res) — aplica em uma resposta

Sessões

  • sessao-cria({ ttl }) — store em memória
  • sessao-id() / sessao-set(store, id, chave, valor) / sessao-get / sessao-tem
  • sessao-limpa / sessao-remove / sessao-cookie / sessao-cookie-parse

Rate Limit

  • limite-cria({ janela, max }) — janela fixa em memória
  • limite-checa(limiter, chave){ permitido, contagem, restante, resetEm }

WebSocket

  • ws-aceita(chave) — calcula Sec-WebSocket-Accept (handshake)
  • ws-resposta(aceita) — resposta 101 Switching Protocols
  • ws-enquadra(opcode, dados) — monta frame (servidor → cliente)
  • ws-dequadra(buffer) — desmonta frame mascarado (cliente → servidor)

HTML

  • html-escape(texto) — escapa & " '
  • html-tag(nome, atributos, filhos) / html-atributos / html-junta

EJS

  • ejs-render(modelo, dados)(escapado), (cru), (código), (comentário)

Servidor integrado

  • server-cria(opcoes){ cors, sessao, limite } + router
  • server-escuta(config, porta) — sobe o servidor (usa o escuta embutido)
  • server-manipula(req, res) — middleware (CORS → sessão → rate limit → router → 404)

Exemplo

xana
traz-ai "xs-server" as s

cria cfg = s.server-cria({
  cors: { origem: "*" },
  sessao: { nome: "sid", ttl: 3600000 },
  limite: { max: 60, janela: 60000 }
})

s.router-get(cfg.rotas, "/api/usuario/:id", (req, res) => {
  res.json({ id: req.params.id, nome: "Maria" })
})

s.router-get(cfg.rotas, "/", (req, res) => {
  res.enviar(s.ejs-render("Ola ", { nome: "Mundo" }), "text/html")
})

cria srv = s.server-escuta(cfg, 8080)

Dependência: módulos nativos node:http, node:vm, crypto (incluídos no Node/XanaScript).

Avaliações

Nenhuma avaliação ainda.