Сценарий
Я создаю сервер nodejs, который будет выполнять роль промежуточного сервера между фактическим клиентом и фактическим сервером. я отправляю запрос на веб-сайт через мой сервер nodejs, получаю ответ от фактического (веб-сайта) сервера и пересылаю его клиенту (браузеру).
Вот часть кода для этого
const cheerio = require('cheerio');
//#================================================================
// include other files and declare variables
//#================================================================
app.get('/*', (req, res) => {
//#================================================================
// some code...
//#================================================================
request(options, function(error, response, body){
if (!error && response.statusCode == 200) {
res.writeHead(200, headers);
if (String(response.headers['content-type']).indexOf('text/html') !== -1){
var $ = cheerio.load(body);
//#================================================
// perform html manipulations
//#================================================
//send the html content as response
res.end($.html());
}else{
res.end(body);
}
}else{
res.send({status: 500, error: error});
}
});
}
Все работает нормально, пока я не наткнулся на этот конкретный сайт https://www.voonik.com/recommendations/bright-cotton-a-line-kurta-for-women-blue-printed-bcown-007b-38-1f2073ca
.
Если вы посмотрите на его источник, он более или менее похож на это
<!doctype html>
<html lang="en-in" data-reactid=".mc12nbyapk" data-react-checksum="-2121099716">
<!-- rest of the html code -->
...
<script type="text/javascript" charset="UTF-8" data-reactid=".mc12nbyapk.1.1">
window.NREUM||(NREUM={});NREUM.info = {"agent":"","beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net"...
...
</script></body></html>
и когда я отправляю этот самый html в свой объект ответа, он отправляет неполные html, т.е. разрывы между где-то последним тегом скрипта.
Я также утешил журнал html, и он печатает всю строку. Но отправка того же в ответе объекта отправляет половину.
Также пробовал res.write (); res.send () и сохранение содержимого html в переменной, а затем отправка этой переменной, но результат такой же, то есть неполное содержимое html.
Я думал о решении, которое не включало бы запись в файл и чтение из него. Просто отправьте ответ сразу после его получения