NPM: npmjs.com/helper.db
Helper.db é uma package de código aberto destina-se a fornecer uma maneira fácil para iniciantes e pessoas de todos os níveis acessarem e armazenarem dados em um ambiente de baixo a médio volume. Todos os dados são armazenados persistentemente por meio de better-sqlite3 ou mysql2 e traz vários outros recursos de qualidade de vida.
- Armazenamento Persistente - Os dados não desaparecem após reinicializações.
-
Múltiplos Drivers - Você pode usar tanto o
better-sqlite3
quanto omysql2
ou até mesmomongo
. - Funciona imediatamente - Não é necessário configurar um servidor de banco de dados, todos os dados são armazenados localmente no mesmo projeto.
- Amigável para Iniciantes - Criado originalmente para uso em tutoriais, a documentação é direta e sem complicações.
- E muito mais...
Pré-requisitos Mac
1. Install XCode
2. Execute: `npm i -g node-gyp` no terminal
3. Execute: `node-gyp --python /path/to/python` no terminal
npm i helper.db better-sqlite3 # (Padrão) Arquivo SQLite3 local
npm i helper.db mysql2 # (Alternativa) Conexão com servidor MySQL
Se você está tendo problemas para instalar, siga este guia de solução de problemas.
Usuários do Windows podem precisar realizar etapas adicionais listadas aqui.
const { HelperDB } = require("helper.db");
const db = new HelperDB(); // Criará um json.sqlite na pasta raiz
// Se você quiser especificar um caminho, pode fazer assim:
// const db = new HelperDB({ filePath: "source/to/path/test.sqlite" });
(async () => {
// Função assíncrona auto-chamada apenas para permitir o uso de async
// Definindo um objeto no banco de dados:
await db.set("userInfo", { difficulty: "Easy" });
// -> { difficulty: 'Easy' }
// Obtendo um objeto do banco de dados:
await db.get("userInfo");
// -> { difficulty: 'Easy' }
// Obtendo uma propriedade de um objeto no banco de dados:
await db.get("userInfo.difficulty");
// -> 'Easy'
// Definindo um objeto no banco de dados:
await db.set("userInfo", { difficulty: "Easy" });
// -> { difficulty: 'Easy' }
// Adicionando um item a um array (que ainda não existe) dentro de um objeto:
await db.push("userInfo.items", "Sword");
// -> { difficulty: 'Easy', items: ['Sword'] }
// Adicionando a um número (que ainda não existe) dentro de um objeto:
await db.add("userInfo.balance", 500);
// -> { difficulty: 'Easy', items: ['Sword'], balance: 500 }
// Repetindo exemplos anteriores:
await db.push("userInfo.items", "Watch");
// -> { difficulty: 'Easy', items: ['Sword', 'Watch'], balance: 500 }
await db.add("userInfo.balance", 500);
// -> { difficulty: 'Easy', items: ['Sword', 'Watch'], balance: 1000 }
// Buscando propriedades individuais
await db.get("userInfo.balance"); // -> 1000
await db.get("userInfo.items"); // ['Sword', 'Watch']
})();
NOTE: Para usar este driver instale:
npm i mysql2
separadamente.
const { HelperDB, MySQLDriver } = require("helper.db");
(async () => {
const mysqlDriver = new MySQLDriver({
host: "localhost",
user: "me",
password: "secret",
database: "my_db",
});
await mysqlDriver.connect(); // conectar ao banco de dados **isso é importante**
const db = new HelperDB({ driver: mysqlDriver });
// Agora você pode usar helper.db normalmente
await db.set("userInfo", { difficulty: "Easy" });
// -> { difficulty: 'Easy' }
})();
NOTE: Para usar este driver, instale:
npm i mongoose
separadamente.
const { HelperDB, MongoDriver } = require("helper.db");
(async () => {
const mongoDriver = new MongoDriver("mongodb://localhost/quickdb");
await mongoDriver.connect();
const db = new HelperDB({ driver: mongoDriver });
// Agora você pode usar helper.db normalmente
await db.set("userInfo", { difficulty: "Easy" });
// -> { difficulty: 'Easy' }
await driver.close();
// desconectar do banco de dados
})();
NOTA: Para usar este driver, instale
npm i write-file-atomic
separadamente.
const { HelperDB, JSONDriver } = require("quick.db");
const jsonDriver = new JSONDriver();
const db = new HelperDB({ driver: jsonDriver });
await db.set("userInfo", { difficulty: "Easy" });
Observação: o banco de dados na memória não é persistente e é adequado para armazenamento em cache temporário.
const { HelperDB, MemoryDriver } = require("quick.db");
const memoryDriver = new MemoryDriver();
const db = new HelperDB({ driver: memoryDriver });
await db.set("userInfo", { difficulty: "Easy" });
Novidades
- Eventos adicionados para maior controle e integração.
- Descrição: Filtra dados que contenham o termo especificado em uma propriedade ou valor.
await db.in("Lucas", "nome"); // Busca onde a propriedade 'nome' contém 'Lucas' await db.in("admin"); // Busca por qualquer valor que contenha 'admin'
Descrição: Filtra valores numéricos que estejam entre min e max.
await db.between(10, 20, "idade"); // Busca onde a propriedade 'idade' está entre 10 e 20 await db.between(5, 15); // Busca por qualquer valor numérico entre 5 e 15
Descrição: Retorna entradas com IDs que terminam com o termo especificado.
await db.endsWith("123"); // Busca IDs que terminam com '123'
Descrição: Retorna entradas com IDs que começam com o termo especificado. (Agora suporta arrays de termos).
await db.startsWith("user"); // Busca IDs que começam com 'user' await db.startsWith(["adm", "mod"]); // Suporte para múltiplos termos
Descrição: Filtra valores que correspondem a uma expressão regular.
await db.regex(/^L.*/, "nome"); // Busca onde a propriedade 'nome' começa com 'L' await db.regex(/@gmail\.com$/); // Busca valores terminando com '@gmail.com'
Descrição: Compara valores de propriedades utilizando operadores lógicos.
await db.compare("idade", ">", 18); // Busca onde 'idade' é maior que 18 await db.compare("status", "==", "ativo"); // Busca onde 'status' é 'ativo'
Descrição: Permite criar filtros personalizados utilizando uma função assíncrona.
await db.custom(async (entry) => entry.value.ativo === true); // Busca onde 'ativo' é true
Detalhes
CorreçõesDescrição: Permite buscar termos em coleções de dados, suportando propriedades específicas, arrays e strings.
await db.search("Lucas", "nome"); // Busca onde 'nome' contém 'Lucas' await db.search("admin"); // Busca por qualquer valor que contenha 'admin'