Teste back-end pokémon pt 2
Bom no ultimo artigo, finalizamos a estrutura padrão do nosso projeto, pra quem não viu vou deixar o link, pois é essencial ter lido ele para avançar nesse artigo.
Teste backend pokémon pt 1 - DEV
Vou partir do principio que você já leu o ultimo artigo e seu projeto está igual o meu, agora vamos iniciar nossa estrutura de rotas para podermos criar nossa primeira controler.
Na raiz do seu projeto crie um arquivo routes.js
, nele vamos colocar o código a baixo:
const bodyParser = require("body-parser");
module.exports = (app) => {
// usamos o body-parser para lidar com as requisiçoes json
app.use(bodyParser.json());
// o primeiro parametro fa função get é a rota que iremos
// chamar na url o segundo já é uma função anônima, mas
// nada impede de ser passado uma função já criada
app.get("/", (req, res) => {
res.status(200).send({ message: "boas-vindas a API Pokémon GO" });
});
};
Vamos voltar agora para nosso primeiro arquivo criado o index.js
nele vamos informar o express que iremos usar nosso arquivo de rotas
// infromamos o path do nosse arquivo de rotas
const routes = require("./routes");
//nosso arquivo ficara assim logo depois de instanciar as
//depêndencias nele
app.use(cors());
app.use(express.json());
const port = 3333;
// disponibiliza as rotas no arquivo base
routes(app);
app.listen(port, () => {
console.log(`Servidor rodando na porta: ${port}`);
});
Agora criaremos nossa primeira controller para isso crie uma pasta chamada controller
e dentro dela um arquivo chamado CsvController.js
.
Antes vamos instalar uma depencia para manipularmos arquivos csv ou xlsx, para isso digitamos em nosso terminal o seguinte comando:
npm i node-xlsx
Voltando na nossa controller vamos criar uma classe e importar a biblioteca instalada
const xlsx = require("node-xlsx");
class ApiController{
}
// nessa linha exportamos nossa classe como módulo para que
// ela possa ser acessada de outros lugares
module.exports = ApiController;
Dentro da nossa classe iremos criar uma função chamada importCsv
static async importCsv(req, res) {
// essa variavel indica o local que esta o arquivo csv, deixei
// o meu de exemplo mais depois do ${__dirname} passe o seu caminho
// vou deixar logo a baixo o repositório novamente com o xlsx
const plan = xlsx.parse(`${__dirname}/../api/PokemonGo.xlsx`);
// Agora que ja temos nosso arquivo mapeado basta percorrermos ele
// com um map e criarmos um objeto novo pois os nomes no arquivo
// contem espaços e caracteres especiais depios batas tertornar ele
// e termos acesso deles na variavel readPlan
const readPlan = plan[0].data.map((data, index) => {
let dados = {
row: data[0],
name: data[1],
pokedexNumber: data[3],
imgName: data[4],
generation: data[5],
evolutionStage: data[6],
evolved: data[7],
familyID: data[8],
crossGen: data[9],
type1: data[10],
type2: data[11],
weather1: data[12],
weather2: data[13],
staTotal: data[14],
atk: data[15],
def: data[16],
sta: data[17],
legendary: data[18],
spawns: data[21],
regional: data[22],
raidable: data[23],
hatchable: data[24],
Shiny: data[25],
nest: data[26],
new: data[27],
notGettable: data[28],
futureEvolve: data[29],
CP40: data[30],
CP39: data[31],
};
return dados
});
// deletamos o primeir registro do objeto pois ele só
//contem o nome das colunas da planilha
delete readPlan[0];
// Agora finalmente retornamos os dados para api
return res.status(200).send(readPlan);
}
Nosso código ainda não esta funcionando pois não criamos uma rota para acessar ele, para isso vamos voltar no nosso arquivo que usamos para definilas routes.js
// dentro dele vamos importar nossa controller primeiro
// a minha está no caminho a baixo, mais subistitua por um a sua escolha
const CsvController = require('../Controller/CsvController')
// agora nosso arquivo de rotas ficara assim
module.exports = (app) => {
app.use(bodyParser.json());
app.get("/", (req, res) => {
res.status(200).send({ message: "boas-vindas a API Pokémon GO" });
});
// nessa linha adicionaremos nossa nossa nova rota,
// indicando que ela deverá usar a controller criada anteriormente
app.get("/import", CsvController.importCsv);
};
Agora basta chamarmos nossa rota, bom como essa é uma rota do tipo get podemos chamar ela pelo navegador pelo endereço https://localhost:3333 , porem eu recomendo o uso do insomnia.
A imagem abaixo é o resultado da nossa requisição.
Top comments (0)