roxterjs

0.1.8 • Public • Published

ROXTERJS

Generic badge Generic badge

Implemente endpoints de roteamento seguindo a convenção de estrutura de pastas, conforme praticado no Next.js

Pacote OpenSource, desenvolvido por RoxterXteezer.

Status da api

  • [x] Estável em produção
  • [x] Ultima versão 2024-04-02
  • [x] Versão atualizada v0.1.8

Novidades

Gerencie as principais envs em ambiente de teste.

# .env.test
$ ROXTER_MODE = "dev"|"prod" #default -> dev. Obrigatório mudar p/ "prod" em ambiente de produção.
$ ROXTER_PORT = 3333 #default -> porta de entrada (não obrigatório)
$ ROXTER_HOSTNAME = "localhost" #default (não obrigatório)
$ ROXTER_FILE_PATH = "./" #default -> __root pasta onde o arquivo app.routes.js será criado (não obrigatório)
$ ROXTER_FILE_ROUTES = "app.routes.js" #default -> nome_do_arquivo onde as rotas serão salvas (não obrigatório)
$ ROXTER_TIMEOUT = 10000 #default -> tempo limite de espera para resposta do serviço (não obrigatório)
$ ROXTER_CPUS = 0 #default -> detalhes no texto abaixo...

ROXTER_CPUS

Através da env ROXTER_CPUS, cria-se um cluster capaz de distribui o número de requisições, atuando como um balanceador de carga (load balancer) para os workers. O processo principal envia cada request para um único worker, alternando entre eles para tentar manter uma carga constante para cada um (estratégia round-robin). O cluster é capaz de entregar mais que o dobro do número de requests, e isto é um ganho excepcional. Vale lembrar que o poder de processamento da máquina não está sendo modificado, mas simplesmente se está evitando uma grande quantidade de tempo ocioso de CPU. Desta forma, a aplicação está fazendo um melhor aproveitamento dos recursos disponíveis. Você ainda poderá multiplicar o número de processamento através da variável. Exemplo:

Primeiros passos (exemplo):

1. Inicie um novo projeto:

# Crie um novo package.json
$ npm init -y

2. Instale o pacote RoxterJS

# npm ou yarn
$ npm i roxterjs

3. Crie na raiz do seu projeto o arquivo app.js:

# app.js

3. Organize uma estrutura de pastas e defina qual será a pasta principal onde as rotas serão aninhadas. Neste exemplo, todas as rotas serão criadas a partir da pasta /routes:

  • root_projeto
    • app.js
    • package.json
    • README.md
    • src/
      • routes/
      • controller/
      • services/

4. No arquivo principal do projeto (app.js), importaremos a biblioteca e, informaremos o caminho exato da pasta raiz das rotas. Exemplo:

# app.js
import Roxter from "roxterjs";
const roxter = await Roxter('./src/routes'); # <-caminho-> './src/routes'

# A função abaixo irá construir as rotas e iniciar o servidor
roxter.Start();

Criando uma rota:

A partir da pasta /routes, todas as subpastas são rotas aninhadas. Exemplo:

  • root_projeto
    • app.js
    • package.json
    • README.md
    • src/
      • routes/
        • api/
          • view/

No exemplo acima, o endpoint ficará:

# http://localhost:3333/api/view

Para definir o method (get | post | put | delete) para o endpoint, basta adicionar o verbo(method) como nome_do_arquivo.js. Exemplo:

  • root_projeto
    • app.js
    • package.json
    • README.md
    • src/
      • routes/
        • api/
          • view/
            • get.js

No exemplo acima, o endpoint se mantém:

# http://localhost:3333/api/view

Agora, é só colocar a lógica da função neste arquivo:

# __root/src/routes/api/view/get.js

export default async function App({ res }){
    return res.end(JSON.stringfy({
        name: "RoxterJs",
        partner: "Roxter.Xteezer",
        address: "São Paulo - SP"
    }))
}

Agora teste sua primeira rota:

# Teste cURL:
$ curl -X GET http://localhost:3333/api/view

Recebendo uma [parâmetros]

Para criar "slugs" na url, basta adicionar colchetes entre o nome da subpasta. Exemplo: __root/src/routes/api/view/[id]/get.js`.

# __root/src/routes/api/view/[id]/get.js

export default async function App({ res, keys }){
    const { id } = await keys;
    return res.end(`Sua chave é ${id}`);
}

O endpoint da requisição será `http://localhost:3333/api/view/valor_do_id`

# Teste cURL:
$ curl -X GET http://localhost:3333/api/view/1234

Recebendo [querys]

Para receber as "querys" pela url, adicione params na chave principal da função:

# __root/src/routes/api/view/[id]/get.js

export default async function App({ res, keys, params }){
    const { color } = await params;
    const { id } = await keys;
    return res.end(`Sua chave é ${id}, sua cor é ${color}`);
}

O endpoint da requisição será `http://localhost:3333/api/view/valor_do_id?color=sua_cor_preferida`

# Teste cURL:
$ curl -X GET http://localhost:3333/api/view/1234?color=azul

Recebendo um [body]

Para receber dados da requisição, o method obrigatório é post.js. Por isso criaremos uma rota diferente e um novo arquivo.

  • root_projeto
    • app.js
    • package.json
    • README.md
    • src/
      • routes/
        • api/
          • view/
            • ...
        • data/
          • dong/
            • post.js

No exemplo acima, o endpoint ficará:

# http://localhost:3333/data/dong

Para receber o "body", adicione body na chave principal da função:

# __root/src/routes/data/dong/post.js

export default async function App({ res, body }){
    const { id } = await body;
    return res.end(`Sua chave é ${id}`);
}

O endpoint da requisição será `http://localhost:3333/app/dong/`

# Teste cURL:
$ curl -X POST http://localhost:3333/data/dong -d '{"id":"191919"}'

Adicionando Resposta ao Header (setHeader)

Você pode adicionar o header em cada endpoint ou padronizar para todos, a partir do arquivo app.js. Veja como:

# app.js
import Roxter from "roxterjs";
const roxter = await Roxter('./src/routes'); 

# Adicione como parâmetro Start({ params })
roxter.Start({
    setHeaders:[
        { name: "Access-Control-Allow-Origin", value: "*" },
        { name: "Access-Control-Allow-Methods", value: "GET, OPTIONS, POST, PUT" },
        { name: "Access-Control-Allow-Headers", value: "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Authorization" }
    ]
});

🎲 Github

# Clone este repositório
$ git clone https://github.com/packrd/roxterjs.git

🛠 Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

Colaboradores

🥇 @rodrigo.buttura

Package Sidebar

Install

npm i roxterjs

Weekly Downloads

2

Version

0.1.8

License

MIT

Unpacked Size

19.7 kB

Total Files

14

Last publish

Collaborators

  • packrd