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
Muito foda, nao conhecia os métodos writeFile e readFile, abriu a mente agr, muito obrigado
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.