为什么这个“没有定义”

时间:2018-06-15 00:58:00

标签: node.js express chart.js

我正在使用Express和API来获取一些数据然后传递到我的视图中。我可以遍历这些数据并从我的EJS模板中打印出来,所以我知道它有一些容量。但是,当我尝试在chart.js图表​​中使用该数据时(全部在同一模板文件中),它表示“未定义”...为什么会发生这种情况?

App.js:

app.get('/search', function(req, res) {
    var query = req.query.search;
    endPoint = 'https://api.iextrading.com/1.0/stock/' + query + '/chart/1d';

    request(endPoint, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            stockData = JSON.parse(body);
            console.log(stockData);
            res.render('search.ejs', {stockData : stockData});
        } else {
            console.log(error);
        }
    });
});

EJS模板文件

<% stockData.forEach(function(minute) { %>
    <canvas id="myChart" width="400" height="400"></canvas>
    <script>
        var ctx = document.getElementById("myChart");
        var myChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: [minute['minute']],
                datasets: [{
                    label: '# of Votes',
                    data: minute['open'],
                    backgroundColor: [
                        'rgba(255, 99, 132, 0.2)'
                    ]
                }]
            },
            options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero:true
                        }
                    }]
                }
            }
        });
    </script>
<% }) %>

修改 如果我将其更改为如此,则表示“stockData”未定义:

<% stockData.forEach(function(minute) { %>
        <canvas id="myChart" width="400" height="400"></canvas>
        <script>
            var ctx = document.getElementById("myChart");
            var myChart = new Chart(ctx, {
                type: 'line',
                data: {
                    labels: [stockData['open']],
                    datasets: [{
                        label: '# of Votes',
                        data: stockData['open'],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)'
                        ]
                    }]
                },
                options: {
                    scales: {
                        yAxes: [{
                            ticks: {
                                beginAtZero:true
                            }
                        }]
                    }
                }
            });
        </script>
    <% }) %>

1 个答案:

答案 0 :(得分:0)

您的stockData in chart.js由javascript on browser生成。但stockData真正拥有非定义值的Nodejs是由ejs在后​​端生成的。如果你想这样使用。首先,您需要呈现chart页面,然后将ajax发送到服务器,获取响应数据。然后使用您刚刚收到的数据来绘制axios.get('/search') .then(function (response) { let data = response.data; new Chart(document.getElementById('line-chart'), { type: 'line', data: { labels: [], datasets: [{ data: [your_response_data_from_nodejs.open], label: 'Blabla', borderColor: '#52D0C4', fill: false } ] }, options: { title: { display: true, text: 'Blala ' } } }); }) .catch(function (error) { throw new error; }); 。像这样的事情:

dotnet publish project