NODE.JS - obter o retorno de uma string na minha view

13 respostas
nodejs
Cleiton_Conceicao

Boa noite pessoal, estou com a seguinte situação…
eu montei uma consulta sql que me retorna um array de objetos e converti para string. minha duvida é, como faço para pegar essa string na minha view?

13 Respostas

rodriguesabner

envia como array e recupera, depois vai desestruturando.


Caso ainda queira uma string, é só vc pegar o que o banco tá retornando, tipo

const result = api.get('teste')
console.log(result.data);
Cleiton_Conceicao

na verdade eu preciso que venha como array de objetos mesmo.pq irei passar como parâmetro para uma função javascript irá renderizar um gráfico.

rodriguesabner

pode fazer do jeito que mencionei acima e preencher o seu chart com um .map se necessário

Cleiton_Conceicao

estou tentando fazer aqui mas estou tendo dificuldades…
vou postar o código pra ver se alguém consegue me ajudar…

no meu controller estou fazendo isso…

router.get("/Dashboards",adminAuth,(req,res)=>{
    sequelize.query(`

        SELECT DISTINCT
        (SELECT STUFF(
                        (SELECT ', ' +'['+''''+DESCRICAO+'''' +', ' +LTRIM(RTRIM(CAST(COUNT(*) AS CHAR))+']')
                        FROM QRCODE
                        INNER JOIN SETOR ON SETOR.ID_SETOR=QRCODE.ID_SETOR
                        GROUP BY DESCRICAO
                        FOR XML PATH ('')) , 1, 1, '')) AS DADOS
        FROM QRCODE
        INNER JOIN SETOR ON SETOR.ID_SETOR=QRCODE.ID_SETOR
        GROUP BY DESCRICAO
    `).then(dashboards => {
      
        res.render("Dashboard/dashboards",{ dashboards: JSON.stringify(dashboards[0]) });

    });
});


na minha view estou pegando assim...
   window.addEventListener('load', function() {

   console.log('<%=dashboards%>');
  

     var data ='<%=dashboards%>';
	 drawChart(data);});
 
    
   </script>

a minha ideia é passar essa strutura pra dentro da função drachart();

[

       ['Task', 'teste'],
       ['Work',     11],
       ['Eat',      2],
       ['Commute',  2],
       ['Watch TV', 2],
       ['Sleep',    7],
     ]
Cleiton_Conceicao

estou fazendo assim, mas está dando erro…

<script>


   window.addEventListener('load', function() {

      var data = [['Setor', 'Quantidade'],
      `<%dashboards.forEach(dashboards => {%>
         
         [<%= dashboards.DESCRICAO%>, <%= dashboards.TOTAL%>],
      <% }) %>`
     
       ]
       console.log(data);
	 drawChart(data);});
 
    
   </script>
rodriguesabner

Tá usando Jade no front?


Que erro tá dando?

Cleiton_Conceicao

estou utilizando javascript…
até então consegui montar o array,mas mesmo assim está dando erro. o engraçado que quando passo o mesmo array dentro da função drawChart o gráfico é exibido.

window.addEventListener('load', function() {

      var data = [ `<%dashboards.forEach(dashboards => {%>['<%= dashboards.DESCRICAO%>', '<%= dashboards.TOTAL%>'],<% }) %>`
       ]
       v = JSON.stringify(data).replace(/\\n/g,'').replace(/[\\r]/g,' ').replace(/[\\"]/g, '').replaceAll(`'`,`"`)
       console.log(v);

    //   v = [['EMERGENCIA12', '6'],['TESTE2', '2'],]
    drawChart(v);
   });![erro|651x500](upload://q6UR0TxXU5u02IVnNnemMzy0R4.png)
Cleiton_Conceicao

rodriguesabner

Mostra o que tem em drawChart

Cleiton_Conceicao
google.charts.load("current", {packages:["corechart"]});
google.charts.setOnLoadCallback(drawChart);
function drawChart(data) {
  
   
   data = google.visualization.arrayToDataTable(data);

  var options = {
    title: 'Registro Por Setor',
    is3D: true,
  };
  
  var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
  chart.draw(data, options);
}
rodriguesabner

Tenta trocar isso

data = google.visualization.arrayToDataTable(data);

por isso:

data = google.visualization.arrayToDataTable(JSON.parse(chartData));
Cleiton_Conceicao

fiz isso q continua o mesmo erro.
:\

rodriguesabner

Certo, o problema que tá rolando aí é que vc não tá passando um array pra o chart, por isso ta dando esse erro

Criado 14 de dezembro de 2020
Ultima resposta 16 de dez. de 2020
Respostas 13
Participantes 2