#javascript #express #chart.js #handlebars.js
Вопрос:
Это моя функция обратного вызова , и у меня есть getData(данные); для получения всех данных JSON и созданного набора данных = [ ]; (для получения некоторых конкретных свойств из всех моих данных JSON)
function call_some_api(getData){
request('https://someUrl..........',{json:true},(err,res,data) => {
if (err) {
console.log(err);
}
if (res.statusCode === 200){
var dataset = [];
data.forEach((value, key)=>{
dataset.push(value.close);
});
getData(data);
}
});
};
И используйте обратный вызов и передайте все мои данные JSON в res.рендеринг работает нормально.
Но я хочу добавить переменную набора данных из моего обратного вызова в res.render, чтобы страница знала переменный набор данных
app.get('/chart',function(req,res){
call_some_api(function(getAPI_data){
res.render('chart',{
dataChart: getAPI_data,
});
});
});
Мне просто нужно, чтобы моя страница /диаграмма (шаблон руля) знала мою переменную из функции обратного вызова. (для построения диаграммы)
Этот мой /график (шаблон руля)
<canvas id="myChart" width="400" height="400"></canvas>
<br><br>
<script>
const ctx = document.getElementById('myChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['Jan', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
// I just want add in this line below.
data: dataset,
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: {
y: {
stacked: true
}
}
}
});
</script>
Комментарии:
1. expressjs.com/en/guide/routing.html прокрутите вниз до «Параметры маршрута». Я верю, что это то, что вы ищете
2. Я просто новичок, понятия не имею. Можете ли вы привести мне какой-нибудь пример ? спасибо, сэр. @JeremyThille
3. Я понимаю, о чем вы говорите, и понимаю, что задаю очень неправильный вопрос. В любом случае, спасибо за ваш ответ.
4. Я сам приношу извинения за неправильный вопрос. Теперь я просто отредактировал сообщение.
5. Вам не нужно так сильно извиняться 🙂 Возможно, вопрос был просто немного двусмысленным
Ответ №1:
Вы имеете в виду второй аргумент, аналогичный getAPI_data
?
function call_some_api(getData){
request('https://someUrl..........',{json:true},(err,res,data) => {
if (err) {
console.log(err);
}
if (res.statusCode === 200){
var dataset = [];
// BTW this can be better/cleaner done with `.map` ;)
data.forEach((value, key)=>{
dataset.push(value.close);
});
getData(data, dataset);
}
});
};
И в вашей конечной точке рендеринга/http
app.get('/chart',function(req,res){
call_some_api(function(getAPI_data, dataset){
res.render('chart',{
dataChart: getAPI_data,
dataset
});
});
});
ПРИМЕЧАНИЕ: Код не протестирован, отредактирован встроенно.
Комментарии:
1. Да, я имею в виду это, это хорошая идея, и я ее пробовал. Я добавляю набор данных на свою страницу /диаграмму (шаблон руля) в теге <скрипт> для chart.js (я просто хочу построить диаграмму), а веб-сайт-ошибка, не обнаруженная ошибка ссылки: набор данных не определен. Вы не могли бы мне помочь? Спасибо, сэр.
2. Извините, я думаю, что мой вопрос выше выходит за рамки этого поста. Спасибо за отличную идею, я думаю, она может вывести меня на следующий шаг.
3. поставьте
console.log
передres.render
и посмотрите, определены ли/есть ли в нем записи. Приведите минимальный рабочий пример.4. Я поместил его console.log(набор данных); перед тем , как выполнить рендеринг, как вы сказали, ошибка по-прежнему заключается в том, что набор данных не определен, но набор данных работает в моем терминале VSCode.
5. Значит, у вас возникли какие-то проблемы с вашим шаблоном руля