Executando verificação de segurança...
2

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?

Carregando publicação patrocinada...
2

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

2
1
1

o objetivo era fazer um NoSQL o mais simples possível pra consumir pouco processamento e memoria... usando soluções de terceiros sem duvida e uma ótima ideia porém consome muito recurso...

0

Para adicionar um sistema de segurança aos códigos acima, você pode usar uma chave secreta para criptografar e assinar as requisições HTTP. Isso garante que as requisições só possam ser realizadas pelo cliente autorizado.

Um exemplo de como fazer isso é usando o módulo "jsonwebtoken" do Node.js para criar e verificar tokens JWT (JSON Web Token).

Primeiro, você precisa instalar o módulo "jsonwebtoken" usando o comando "npm install jsonwebtoken":
npm install jsonwebtoken

Depois, você pode usar o módulo para criar um token JWT para cada cliente autorizado. O token deve conter um "id" do cliente e uma "chave secreta" compartilhada pelo cliente e pelo servidor. O código ficaria assim:

const jwt = require('jsonwebtoken');

const chaveSecreta = 'chave_secreta';

// Função para criar um token JWT para o cliente
const criarToken = (id) => {
  return jwt.sign({ id }, chaveSecreta, { expiresIn: '1h' });
}

// Rota para criar um token para o cliente
app.post('/login', (req, res) => {
  // Verifica as credenciais do cliente (por exemplo, usuário e senha)
  const credenciaisValidas = verificarCredenciais(req.body.usuario, req.body.senha);
  if (credenciaisValidas) {
    // Se as credenciais forem válidas, cria um token JWT para o cliente
    const token = criarToken(req.body.usuario);
    res.send({ token });
  } else {
    // Se as credenciais não forem válidas, envia um erro
    res.status(401).send('Usuário ou senha inválidos');
  }
});

Depois de criar um token para o cliente, você pode adicionar uma função de verificação de autenticação em cada rota que precisa de autenticação. A função deve verificar se o token enviado pelo cliente é válido usando a chave secreta compartilhada. O código ficaria assim:

// Função para verificar se o token é válido
const verificarToken = (req, res, next) => {
  // Verifica se o token foi enviado na requisição
  const token = req.headers['x-access-token'];
  if (!token) {
    return res.status(401).send('Token não enviado');
  }
  // Verifica se o token é válido usando a chave secreta
  jwt.verify(token, chaveSecreta, (err, decoded) => {
    if (err) {
      return res.status(401).send('Token inválido');
    }
    // Se o token for válido, adiciona o "id" do cliente na requisição
    // para uso posterior
    req.clienteId = decoded.id;
    next();
  });
}

// Adiciona a função de verificação de autenticação em todas as rotas
// que precisam de autenticação
app.post('/produtos', verificarToken, (req, res) => {
  // O código da rota fica aqui
});
app.put('/produtos/:id', verificarToken, (req, res) => {
  // O código da rota fica aqui
});
app.delete('/produtos/:id', verificarToken, (req, res) => {
 
// O código da rota fica aqui
});

Com isso, todas as rotas que precisam de autenticação passarão pelo processo de verificação de token antes de executar o código da rota. Se o token for válido, a rota será executada normalmente. Se o token for inválido ou não existir, a função enviará uma resposta de erro para o cliente.

2

Muito foda, não sei se preciso de tanta segurança assim, é só pra eu conseguir editar os dados na mão caso precise.

Mas salvei essa sua resposta e vou tirar um dia pra aplicar, estudar e entender esses conceitos novos, muito obrigado

0

se você estiver utilizando a vercel pode colocar o login e senha nas variaveis globais da vercel e comparar com o passado pela aplicação depois de sanatizar e pronto...

Agora você tem um super sistema NoSQL seguro e que faz o que você deseja...

2

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.

1
1
1

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.

1
0

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.


Um exemplo de arquivo .csv onde cada linha é um registro

Exemplo de arquivo .cvs
Fonte: Blog do Tomás Vásquez