На моем веб-сайте необходимо загрузить некоторые файлы JSON, и в целом я бы использовал fetch
на стороне клиента , например, так:
fetch(jsonFileLocation)
.then(res => res.json())
.then(json => {
document.getElementById("jsonOutput").innerText = JSON.stringify(json, null, 2);
});
Но в моем случае при рендеринге HTML происходит значительная задержка: пользователи сначала увидят пустое место, а затем загруженный контент JSON. Поэтому я подумал, что если я отобразлю содержимое JSON на стороне сервера , это может немного ускорить процесс.
Я мог бы сначала проанализировать JSON, затем res.render()
полностью HTML, но я не хочу, чтобы процесс синтаксического анализа файла JSON задерживал остальную часть страницы, поэтому в моем Node / Express / Pug setup Я попытался сделать два рендера:
res.render('index', {
title: 'Homepage',
mainContent: '...'
});
fs.readFile(jsonFileLocation, 'utf8', (err, data) => {
if (err) {
return;
}
res.render('index', {
jsonOutput: JSON.stringify(json, null, 2)
})
})
Но это дает мне ошибку Error: Can't set headers after they are sent.
.
Как лучше подойти к этой проблеме?