У меня есть код, который удаляет определенную страницу из Интернета. Для этого я использую puppeteer+cheerio. На моем ноутбуке код работает отлично. Но после развертывания на VDS селектор cheerio each() начал странно работать. (Но он все еще отлично работает на моем ноутбуке). Проблема в том, что на VDS возникает следующая ошибка:
(узел: 28544) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'trim' неопределенного в узле. (/home/ubuntu/handbot/liveMonitoring.js:211:82) на initialize.exports.each (/home/ubuntu/handbot/node_modules/cheerio/lib/api/traversing.js:300:24) на Node. (/home/ubuntu/handbot/liveMonitoring.js:182:29) на initialize.exports.each (/home/ubuntu/handbot/node_modules/cheerio/lib/api/traversing.js:300:24) на liveMonitoring (/ home/ubuntu/handbot/liveMonitoring.js:175:28) в process._tickCallback (внутренний/процесс/next_tick.js:68:7) (узел: 28544) UnhandledPromiseRejectionWarning: отклонение необработанного обещания. Эта ошибка возникла либо из-за броска внутри асинхронной функции без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch(). (идентификатор отклонения: 1) (узел: 28544) [DEP0018] Предупреждение об устаревании: отклонение необработанных обещаний устарело. В будущем отказы от обещаний, которые не будут обработаны, завершат процесс Node.js с ненулевым кодом выхода.
Самое интересное, что иногда ошибка пропадает (Кажется, нет закономерности, в которой возникает ошибка). Я пытался решить эту проблему, переустановив node js, но это не сработало. Проблема не в моем коде (поскольку он работает на моем ноуте и даже иногда на вдс). Я думаю, что есть что-то с экспортом каждой() функции. Поскольку из-за сообщения об ошибке что-то не так происходит в
/home/ubuntu/handbot/node_modules/cheerio/lib/api/traversing.js:300:24
Код файла traversing.js (298-302 строки):
`
exports.each = function(fn) {
var i = 0, len = this.length;
while (i < len && fn.call(this[i], i,
this[i]) !== false) ++i;
return this;
};
Код, который вызывает ошибку:
const page = await browser.newPage();
await page.goto(url, {timeout:0}).catch((err)=> { console.log(err)});
await page.setRequestInterception(true);
page.on('request', req => {
if(['image', 'stylesheet', 'font'].indexOf(req.resourceType()) !== -1)
req.abort();
else
req.continue();
});
let content = await page.content();
let $ = cheerio.load(content);
let gameContent=$('#games_content').children('div').children('div');
gameContent.children().each(function(i, elem1){
let league=$(elem1).children('.greenBack').children('.c-events__name').children('a').text().trim();
$(this).children().each(function(j, elem2){
if(j!==0) {
let currentInfo = {};
currentInfo['league'] = league;
let shortCut = $(elem2).children('.c-events__item_game').children('.c-events-scoreboard').children();
let mainInfo = shortCut.first();
currentInfo['link'] = mainInfo.children("a").attr("href");
let teams = mainInfo.children("a").children("span").attr("title").trim().split("—");
currentInfo['team1'] = teams[0].trim();
currentInfo['team2'] = teams[1].trim();
let shortCutForTotal = $(elem2).children('.c-events__item_game').children('.c-bets');
}
});
});
Заранее спасибо! `
Cannot read property 'trim' of undefined at Node. (/home/ubuntu/handbot/liveMonitoring.js:211:82)
я не думаю, что эта проблема имеет какое-либо отношение кeach
это просто часть трассировки стека - person Thomas   schedule 21.10.2018