Como criar um banco de dados simples?
Como faço para criar um banco de dados em formato de arquivo da forma mais simples possível para usar em projetos HTML/Node (não sei PHP), se possível um arquivo JSON.
Existe a solução do Local Storage, mas não é algo acessível, o meu de outro projeto sumiu, é muito vulnerável.
Enfim, como crio esse banco de dados? Tem que usar o Node? Fazer em formato de API?
Vou te ajudar a fazer um Banco de Dados extremamente facil, NoSQL...
Por exemplo, você pode criar uma rota para ler os dados de um banco de dados JSON da seguinte maneira:
const express = require('express');
const fs = require('fs');
const app = express();
app.get('/produtos', (req, res) => {
fs.readFile('./bd.json', (err, data) => {
if (err) throw err;
res.json(JSON.parse(data));
});
});
app.listen(3000, () => {
console.log('API iniciada na porta 3000');
});
abaixo um exemplo do bd.json
{
"produtos": [
{
"id": 1,
"nome": "Caneta",
"preco": 3.50
},
{
"id": 2,
"nome": "Lápis",
"preco": 2.00
},
{
"id": 3,
"nome": "Borracha",
"preco": 1.50
}
]
}
Adicionar dados ao Banco de Dados NoSQL
app.post('/produtos', (req, res) => {
fs.readFile('./bd.json', (err, data) => {
if (err) throw err;
const bancoDeDados = JSON.parse(data);
bancoDeDados.produtos.push({
"id": bancoDeDados.produtos.length + 1,
"nome": req.body.nome,
"preco": req.body.preco
});
fs.writeFile('./bd.json', JSON.stringify(bancoDeDados), (err) => {
if (err) throw err;
res.send('Produto adicionado com sucesso');
});
});
});
Atualizar dados ao Banco de Dados NoSQL
app.put('/produtos/:id', (req, res) => {
fs.readFile('./bd.json', (err, data) => {
if (err) throw err;
const bancoDeDados = JSON.parse(data);
const produto = bancoDeDados.produtos.find(p => p.id == req.params.id);
if (produto) {
produto.nome = req.body.nome;
produto.preco = req.body.preco;
fs.writeFile('./bd.json', JSON.stringify(bancoDeDados), (err) => {
if (err) throw err;
res.send('Produto atualizado com sucesso');
});
} else {
res.send('Produto não encontrado');
}
});
});
Deletar dados ao Banco de Dados NoSQL
app.delete('/produtos/:id', (req, res) => {
fs.readFile('./bd.json', (err, data) => {
if (err) throw err;
const bancoDeDados = JSON.parse(data);
const produtoIndex = bancoDeDados.produtos.findIndex(p => p.id == req.params.id);
if (produtoIndex >= 0) {
bancoDeDados.produtos.splice(produtoIndex, 1);
fs.writeFile('./bd.json', JSON.stringify(bancoDeDados), (err) => {
if (err) throw err;
res.send('Produto deletado com sucesso');
});
} else {
res.send('Produto não encontrado');
}
});
});
NÃO ESQUEÇA DE INSTALAR O EXPRESS
ESSE CODIGO PRECISA SER ADICIONANDO UM SISTEMA DE SEGURANÇA PARA EVITAR QUE ALGUEM MAL INTENCIONADO CIRE UM ARQUIVO GIGANTE E ATRAPALHE SEU SISTEMA
NÃO TESTEI POREM CASO NÃO FUNCIONE SO COMENTAR QUE ARRUMO PRA VOCÊ, E LEMBRANDO QUE O ARQUIVO TEM QUE TER PERMISSÃO DE ESCRITA
Realmente, no seu caso SQLite é uma boa solução.
Você consegue utilizar SQLite atráves de nodeJS. A maioria dos frameworks para node vão te oferecer formas de configurar um banco de dados usando SQLite, um exemplo que eu conheço é um NestJS. Caso não queira utilizar um framework, existe bibliotecas em nodeJS que irão te ajudar nessa tarefa, como a ORM sequelize.
Vale a pena da uma olhada em um SQLite também.
Se for algo bem simples mesmo você pode usar o módulo FS para ler um arquivo json, edita-lo e depois sobrescrever o arquivo json, isso tudo em nodejs
Se for realmente um banco de dados, mas simples tem um tutorial ensinando a criar um banco de dados como o sqlite. https://cstack.github.io/db_tutorial/
nao reinvente a roda, use sqlite se realmente quiser manter um banco de dados junto com o projeto. tem outras opcoes como por exemplo AWS DynamoDB, restdb, Fauna ou mesmo o Firebase Firestore.
armazenar informacoes assim como vc esta propondo, em json escritos no disco, pode até funcionar mas a performance pode ficar comprometida.
Toda linguagem oferece alguma forma de trabalhar com arquivos. É possível utilizar vários formatos ex: file.json, file.csv, file.bat, file.txt, etc....
Só aprender como manipular arquivos na linguagem que deseja utilizar.
Fonte: Blog do Tomás Vásquez