【问题标题】:Getting String array from node js to ejs将字符串数组从节点 js 获取到 ejs
【发布时间】:2019-02-18 06:32:10
【问题描述】:

我正在尝试学习 chart.js。所以我试图制作一个图表来测试chart.js。

当我直接在 chart.js 数据中定义标签时,一切正常。但是当我尝试从 mongodb 中检索数据,将其传递给 index.ejs,然后将其替换为脚本中的标签和数据时,它不起作用。

另外,当我通过直接给出一些标签(不是从 nodejs 收到的标签)并使用从 nodejs 收到的数据来替换标签时,它起作用了。 (注:Schema 中 country 为 String 类型,value 为 Number 类型)。

app.js、index.ejs 的代码和输出如下。

谢谢!

app.js 代码:

app.get('/', async function (req, res) {

  var countryArr = [];
  var valuesArr = [];

  var getCountry = data.find({}).select('country -_id');
  var getValues = data.find({}).select('value -_id');

  getCountry.exec(function(err, x){
    for(var i = 0; i < x.length; i++){
      countryArr.push(x[i].country);
    }
    console.log(countryArr);
    getValues.exec(function(err, x){
      for(var i = 0; i < x.length; i++){
        valuesArr.push(x[i].value);
      }
      console.log(valuesArr);
      res.render('index',{
        country : countryArr,
        value : valuesArr
      });
    });
  });
});

index.ejs

<body>
  <p>
    <%= country %>
  </p>
  <p>
    <%= value %>
  </p>
  <div class="container">
    <canvas id="myChart" style="width: 100px; height=100px"></canvas>
  </div>
  <script>
    var ctx = document.getElementById("myChart");
    console.log(country[0].toString());
    var myChart = new Chart(ctx, {
      type: 'bar',
      data: {
        labels: [<%= value %>],
        datasets: [{
          label: '#',
          data: [<%= value %>],
          backgroundColor: [
            'rgba(255, 99, 132, 0.2)',
            'rgba(54, 162, 235, 0.2)',
            'rgba(255, 206, 86, 0.2)',
            'rgba(75, 192, 192, 0.2)',
            'rgba(153, 102, 255, 0.2)',
            'rgba(255, 159, 64, 0.2)'
          ],
          borderColor: [
            'rgba(255,99,132,1)',
            'rgba(54, 162, 235, 1)',
            'rgba(255, 206, 86, 1)',
            'rgba(75, 192, 192, 1)',
            'rgba(153, 102, 255, 1)',
            'rgba(255, 159, 64, 1)'
          ],
          borderWidth: 1
        }]
      },
      options: {
        scales: {
          yAxes: [{
            ticks: {
              beginAtZero: true
            }
          }]
        }
      }
    });
  </script>
</body>

Browser Output

【问题讨论】:

    标签: node.js mongoose chart.js ejs


    【解决方案1】:

    我发现我哪里出错了。

    在 index.ejs 中,而不是这个...

    labels: [<%= value %>],
    

    应该是……

    labels: <%- JSON.stringify(country)%>,
    

    基本上我从 app.js 收到的数组是 [abc,xyz,pqr]。 所以要将其转换为像 ['abc','xyz','pqr'] 这样的字符串数组,我们必须使用 JSON.stringify()

    无论如何,谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多