Я новичок здесь. У меня проблема с node.js с комбинацией системы шаблонов EJS и библиотеки визуализации D3.js.
файл node.js:
router.post('/foo', function(req, res) {
fs.unlink('./public/d3.json'); // we delete old data (if exist)
res.render('foo'); // page render
//lets suppose that here we request some async data and put them to the array via promises
let array = []; // our array with data
Promise.all(array).then(function(all) { //when we download all the necessary data...
var newArray = JSON.stringify(array);
fs.writeFile('./public/d3.json', newArray, 'utf-8', function(err) { //we write it to file - so chart file bellow can render it
if (err) {
console.log('writing public/d3.json file with newArray failure] - ' + err);
}
else {
console.log('public/d3.json file with content of newArray has been created.');
}
});
});
}
module.exports = router;
мой EJS-файл выглядит так:
<html>
<head></head>
<body>
<div class="chart"></div>
<script>
<% include ../public/d3.js %> // d3 library
<% include ../public/d3_chart.js %> // chart render code
</script>
</body>
</html>
файл моего графика выглядит так:
d3.json("../public/d3.json", cb);
function cb(error, data) {
if (error) {
console.log(error);
}
if (data) { // render chart
}
}
Но это не работает. Он ничего не отображает - вероятно, файл d3.json не содержит данных, когда шаблон ejs запускает d3_chart.js. Но не стоит ли обещать дождаться данных и затем вывести диаграмму? Иначе какой смысл использовать обещания в d3? Как заставить это работать? Я чувствую, что здесь что-то упустил и мне нужен совет Спасибо.