Exemplos de como alterar e executar as API.
- Configurando banco de dados da API SENSOR
- Configurando banco de dados da API SITE
- Criando uma nova rota na API
Para estabelecer a conexão com o banco, siga esse caminho:
Altere o seguinte bloco de código:
Para estabelecer uma conexão deve ser alterado o user:"XXXXX" para user:"root" e password:"XXXXX" para password:"senhaDoSeuBanco" por exemplo (a senha muda de configuração para configuração do banco na máquina).
user:"XXXXX" => user:"root"
password:"XXXXX" => password:"123456"
Dentro do diretório api-sensor-dht11 execute os seguintes comandos:
Instale todos os pacotes pendentes:
npm install
Inicie a aplicação para gerar dados aleatórios:
npm start
Para inserir os dados gerados ou captados do arduino, abra o arquivo index.html dentro de api-sensor-dht11 e veja os gráficos se movendo, se estiver tudo ok, pode ir no terminal de comando e ver as medidas sendo inseridas na tabela de medida do database acquatec no banco!
Para estabelecer a conexão com o banco, siga esse caminho:
Altere o seguinte bloco de código:
Para estabelecer uma conexão deve ser alterado o user:"XXXXX" para user:"root" e password:"XXXXX" para password:"senhaDoSeuBanco" por exemplo (a senha muda de configuração para configuração do banco na máquina).
user:"XXXXX" => user:"root"
password:"XXXXX" => password:"123456"
Para o banco de dados funcionar é preciso estar configurado! Como visto no diagrama acima, temos o diretório database e dentro de database possui um arquivo chamado sql.sql que contém um código (um comentário da metade pra baixo) de criação do banco mysql local!
Dentro do diretório api-site execute os seguintes comandos:
Instale todos os pacotes pendentes:
npm install
Inicie a aplicação:
npm start
Acesse localhost:3333 para usar o front!
Para criar uma nova rota na API, siga esse caminho:
Com a tabela criada no banco, tente usar uma rota já existente se fizer sentido. Se não fizer sentido, siga os próximos passos.
Vá na app.js que fica em api-site e adicione uma linha adicionando o arquivo de rotas que você irá usar! No meu caso, na linha 15 adicionei carrosRouter importando o arquivo carros.js da pasta routes:
var app = express();
var indexRouter = require("./src/routes/index");
var usuarioRouter = require("./src/routes/usuarios");
var avisosRouter = require("./src/routes/avisos");
var medidasRouter = require("./src/routes/medidas");
var carrosRouter = require("./src/routes/carros");
Ainda na app.js, com a importação criada, é possível criarmos uma "rota"! Como seria? Irei descer mais um pouco o arquivo e iremos nos deparar com o seguinte código e irei adicionar uma "rota" nova para a minha API:
app.use(cors());
app.use("/", indexRouter);
app.use("/usuarios", usuarioRouter);
app.use("/avisos", avisosRouter);
app.use("/medidas", medidasRouter);
app.use("/carros", carrosRouter);
Pode perceber que logo depois de /medidas eu adicionei um /carros e chamei a carrosRouter importada anteriormente!
Logo após ter feito a primeira "porta de entrada" da nossa API, quando um front-end for acessar essa nossa rota, ele deve colocar /carros/algumaCoisa, o que seria esse "alguma coisa"? Dentro de api-site -> src -> routes, irei criar um novo arquivo chamado carros.js que é nesse arquivo que eu importo no passo 1. Importando arquivo que contém as rotas
No arquivo carros.js dentro de routes, devemos criar exatamente nessa estrutura:
Configuração padrão para indicar o uso da biblioteca do node para criação:
var express = require("express");
var router = express.Router();
Importando a controller que vai ser criada posteriormente:
var carroController = require("../controllers/carroController");
Criando a rota que vai indicar /carros/cadastrar ao ser acessada pelo front-end. O /cadastrar é do tipo post e o /listar é do tipo get:
router.post("/cadastrar", function (req, res) {
// função a ser chamada quando acessar /carros/cadastrar
carroController.cadastrar(req, res);
});
router.get("/listar", function (req, res) {
// função a ser chamada quando acessar /carros/listar
carroController.listar(req, res);
});
Sempre devemos deixar visível (exportar) para outro que assim outro arquivo consiga importar todas as nossas configurações desse arquivo:
module.exports = router;
Ao final de tudo, teremos o arquivo com essa estrutura:
var express = require("express");
var router = express.Router();
var carroController = require("../controllers/carroController");
router.post("/cadastrar", function (req, res) {
// função a ser chamada quando acessar /carros/cadastrar
carroController.cadastrar(req, res);
});
router.get("/listar", function (req, res) {
// função a ser chamada quando acessar /carros/listar
carroController.listar(req, res);
});
module.exports = router;
Dentro de api-site -> src -> controller, crie um arquivo chamado carroController.js:
Dentro do arquivo chamamos a carroModel que fará a conexão com o banco:
var carroModel = require("../models/carroModel");
Cria a função que vai ser chamada no passo de cima e exporta ela. No final ficará assim:
var carroModel = require("../models/carroModel");
function listar(req, res) {
carroModel.listar().then(function(resultado){
// precisamos informar que o resultado voltará para o front-end como uma resposta em json
res.status(200).json(resultado);
}).catch(function(erro){
res.status(500).json(erro.sqlMessage);
})
}
function cadastrar(req, res) {
var nome = req.body.nome;
if (nome == undefined) {
res.status(400).send("Seu nome está undefined!");
}
carroModel.cadastrar(nome).then(function(resposta){
res.status(200).send("Carro criado com sucesso");
}).catch(function(erro){
res.status(500).json(erro.sqlMessage);
})
}
module.exports = {
listar,
cadastrar
}
Sempre exportando a função que eu criar para poder ser "enxergada" por outro arquivo.
Dentro de api-site -> src -> models, crie um arquivo chamado carroModel.js:
Dentro do arquivo importamos a configuração do banco para fazer consultas futuras no banco:
var database = require("../database/config")
Aqui podemos criar a função que fará a comunicação com o banco de dados, onde ela recebe o paramêtro nome e executa uma query de insert com o valor desse nome:
function listar() {
var instrucao = `
SELECT * FROM carro;
`;
console.log("Executando a instrução SQL: \n" + instrucao);
return database.executar(instrucao);
}
function cadastrar(nome) {
var instrucao = `
INSERT INTO carro (nome) VALUES ('${nome}');
`;
console.log("Executando a instrução SQL: \n" + instrucao);
return database.executar(instrucao);
}
Sem esquecer de exportar as funções que criamos para serem vistas por outros arquivos
module.exports = {
cadastrar,
listar
};
E por fim teremos o arquivo completo com isso:
var database = require("../database/config")
function listar() {
var instrucao = `
SELECT * FROM carro;
`;
console.log("Executando a instrução SQL: \n" + instrucao);
return database.executar(instrucao);
}
function cadastrar(nome) {
var instrucao = `
INSERT INTO carro (nome) VALUES ('${nome}');
`;
console.log("Executando a instrução SQL: \n" + instrucao);
return database.executar(instrucao);
}
module.exports = {
cadastrar,
listar
};