1
resposta

Como pegar o parâmetro da rota?

Oi pessoal, estou fazendo uma página em que eu preciso pegar um parâmetro da rota e passar para um outro arquivo em que estou consumindo uma API, mas não estou conseguindo importar o arquivo ou a variável, já tentei de várias formas.. No caso eu precisava pegar a variável

Arquivo index.js, onde a página está sendo reenderizada:

const express = require("express");
const app = express();
const bodyParser = require("body-parser");

// View engine
app.set('view engine', 'ejs');
app.use(express.static("public"));

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

identificacaoLoja;

app.get("/:nomeLoja", (req, res) => {
    identificacaoLoja = req.params.nomeLoja;
    res.render("index");
})

app.listen(1010, () => {
    console.log("O servidor da interface está rodando!!!");
});

module.exports = identificacaoLoja;

Arquivo loja.js, onde é realizada a chamada da API:

const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const identificacaoLoja = require('../../../index.js');

console.log(identificacaoLoja);


const loja = urlParams.get(`/lojas/carregar/${identificacaoLoja`); //raiz da requisição

const URLLoja = "http://localhost:4444";

getLoja();

const getLoja = function getLoja() {
    axios({
        method: "get",
        url: `${URLLoja}/lojas/carregar/${identificacaoLoja}`
    })

        .then((response) => {
            let loja = response.data;     
            let chaveIdentificacaoLoja = loja.chaveIdentificacao;
            let chaveLoja = chaveIdentificacaoLoja.chave;
            let splitLoja = chaveLoja.split("-");
            let nomeLoja = splitLoja.join(" ");
            document.getElementById("nomeLoja").innerHTML = `${nomeLoja}`;
            document.getElementsByClassName("nomeLoja").innerHTML = nomeLoja;

        }).catch(error => {
            console.log(error);
        })
}
1 resposta

Oi Fernanda! Desculpa a demora para responder.

Uma possível solução para o seu problema seria "inverter" as importações de arquivo. No seu código, oidentificacaoLoja do index.js é exportado para lojas.js, mas geralmente o que é feito é exportar a função getLoja de loja.js para o index.js. Dessa forma é possível utilizar a função getLoja como callback de uma rota, igual feito na linha 14 do seu index.js.

Sendo assim, seu loja.js ficará mais ou menos assim:

// atenção aos parâmetros adicionados (req e res) para que seja possível acessar
// os parâmetros da requisição
const getLoja = function getLoja(req, res) {
    // pegando o parâmetro "identifiacaoLoja" da URL
    const identificacaoLoja= req.params.identificacaoLoja; 

    // requisição do axios aqui
}

// exportando a função getLoja para outros arquivos
module.exports = { getLoja };

E no index.js adicione as seguintes linhas:

// no início do arquivo
const { getLoja } = require(caminho_ate_loja.js);

// antes de app.listen()
app.get("/lojas/carregar/:identificacaoLoja", getLoja);

Desse jeito informamos o express que toda requisição get para a url /lojas/carregar/:identificacaoLoja será tratada pela função getLoja, responsável por pegar o parâmetro identificacaoLoja e fazer uma chamada pra outra API.

Aqui na plataforma temos um curso de NodeJS e Express onde essa parte de roteamento é abordada.

Caso surjam novas dúvidas, pode perguntar aqui!