npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

squirrel_resource

v1.0.24

Published

biblioteca para servidores nodejs

Downloads

5

Readme

squirrel_resource

Aqui vou abordar as informações para utilização da biblioteca.

Conteúdo

Instalação

$ npm install --save dotenv mysql2 express body-parser squirrel_orm squirrel_resource

observação a biblioteca usa as seguintes biblitecas:

  • dotenv
  • mysql2
  • express
  • body-parser
  • squirrel_orm

Inicializando projeto

Todos os arquivos são carregados utilizando Storage.load

const { Storage } = require('squirrel_resource')

// vai criar os diretorios e os principais arquivos
Storage.load()

Copie e cole o .env-example como .env

$ cp .env-example .env

Criando servidor

Após inicializar o projeto e criar o .env seguindo as informações a cima, você pode criar o arquivo principal do seu projeto.

const { Storage, Middleware } = require('squirrel_resource')
// vai criar os diretorios e os principais arquivos
Storage.load()
const Api = require('./api'),
      middleware = Middleware.build()

// carrega o roteamento do arquivo api/index.js
middleware.router(Api)

// após criar o servior e iniciar a escuta
// retorna o server criado
// retornos Http, Https
// dependendo da configuração no env
// retorno do callback do listen é
// { host: string, port: number, protocol: 'http' | 'https' }
const server = middleware.listen(({ host, port, protocol }) => {
  console.log(`server open in ${protocol}://${host}:${port}`)
})

Variaveis de Ambiente

Por padrão seu env vai vir assim

HTTP_PROTOCOL=http
HTTP_HOST=127.0.0.1
HTTP_PORT=3000

// maximo de requisições por minuto
MAX_REQUEST_SECONDS=20
// quantidade de minutos para abrir a api
// quando atingir o maximo de requisições
REQUEST_RESET_SECONDS=60
// limpeza do cache
// passado em segundos 3600 é 1 hora
SERVER_CACHE_CLEAR_SECOND=3600

// chave secreta do seu aplicativo
SERVER_SECRET=
// senha secreta do seu aplicativo
SERVER_PASSPHRASE=
// iv para utilização da criptografia simmetrica
SERVER_IV=

// opções para o https
HTTP_CERT=
HTTP_KEY=
HTTP_PFX=
HTTP_PASSPHRASE=


// configurações da conexão com o banco de dados
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=
MYSQL_DATABASE=
MYSQL_TIMEOUT=18000

// opções para utilização de ssl na conexão com o banco de dados
MYSQL_CERT=
MYSQL_KEY=
MYSQL_CA=
MYSQL_PFX=
MYSQL_PASSPHRASE=
MYSQ_CRL=
MYSQL_CIPHERS=

Para adicionar secret, passphrase ou iv, recomendo que utilize o Make para configurar, o Make é criado quando se utiliza o 'Storage.load', e responsavel por criar seus arquivos para você.

"--set responsavel por carregar o valor"
"--env-secret ou --env-passphrase é responsavel por indicar onde vai ser salvo o valor"
"--hash informa que o valor vai utilizar o hash antes de salvar"
"para mais utilizações execute 'node make --help'"
$ node make --set=[value] --env-secret --hash
$ node make --set=[value] --env-passphrase --hash

não recomendado

$ node make --set=[value] --env-secret --env-passphrase --hash

Você também pode informar se já quer adicionar valor ao iv

$ node make --set=[value] --env-secret --iv --hash
$ node make --set=[value] --env-passphrase --iv --hash

obs: hash utiliza do algoritmo 'sha512' e adiciona por padrão em hexadecimal

Roteamento

A bibliteca já te fornece um arquivo em 'api/index.js' para definição das rotas. Mas você também pode criar novos arquivos de rota, para não fazer manualmente utilize:

$ node make --router=[NAME]

Vai criar uma rota para você, depois disso é so importar no seu arquivo em api/index.js

const { Router } = require('squirrel_resource')
const [NAME]Router = require('./[NAME]Router')

module.exports = Router().use([NAME]Router)

Para deixar mais didático o exemplo abaixo vai deixar mais claro (saia do escuro meu jovem).

$ node make --router=Auth
const { Router } = require('squirrel_resource')
const AuthRouter = require('./AuthRouter')

module.exports = Router().use(AuthRouter)

Para definir rotas é a mesma coisa que no express porém com algumas funcionalidades a mais:

  • prefix
  • middleware
const { Router } = require('squirrel_resource')

module.exports = Router()
  .get('/', function (request, response) {
    ...code
  })
// outra forma e importando o seu controller

Para importar o seu controller basta criar utilizando o make, neste exemplo crio também com o service.

$ node make --controller=Auth --service
const { Router } = require('squirrel_resource')

/**
 * primeiro parametro é a rota
 * segundo parametro pode ser uma string contendo o nome do seu controller ou uma função
 * terceiro parametro é o metodo que vai ser chamado
 * 
 * se você utilizou o make o controller vem limpo sem funções para você definir o nome delas.
 * estou supondo que você colocou uma função get e outra função post
 * as funções podem ser assíncronas
 */
module.exports = Router()
  .get('/', 'AuthController.js', 'get')
  .get('/', 'AuthController.js', 'post')

Você pode definir prefixos.

const { Router } = require('squirrel_resource')

/**
 * primeiro parametro é a rota
 * segundo parametro pode ser uma string contendo o nome do seu controller ou uma função
 * terceiro parametro é o metodo que vai ser chamado
 * 
 * se você utilizou o make o controller vem limpo sem funções para você definir o nome delas.
 * estou supondo que você colocou uma função get e outra função post
 * as funções podem ser assíncronas
 */
module.exports = Router()
  .prefix('/api', function (api) {
    // aqui crio o prefixo api
    // e depois crio o prefixo v1 pois se você for utilizar
    // versões para rota lembre-se de manter a versão anterior para não
    // ocorrer erros em quem as utiliza
    return api.prefix('/v1', function (v1) {
      return v1
        .get('/', 'AuthController.js', 'get')
        .get('/', 'AuthController.js', 'post')
    })
  })

Middleware

Você pode utilizar duas formas para incluir o middleware.

primeira forma é você utilizar o Router para fazer isto.

const { Router } = require('squirrel_resource')

module.exports = Router().use(function (request, response, next) {

})

ou

const { Router } = require('squirrel_resource')

module.exports = Router().use('/', function (request, response, next) {

})

caso você queira colocar o middleware apenas em uma rota você pode criar desta forma:

$ node make --middleware=[NAME]

o middleware vai ser criado no diretorio http/middleware/[NAME]Middleware.js

basta adicionar a sua rota:

const { Router } = require('squirrel_resource')

module.exports = Router().middleware('/', '[NAME]Middleware.js')

ou

const { Router } = require('squirrel_resource')

module.exports = Router().middleware('/', function(request, response, next) {

})

exemplo de uso:

$ node make --middleware=Auth
const { Router } = require('squirrel_resource')

module.exports = Router().middleware('/', 'AuthMiddleware.js')