Серверная (изоморфная) обработка DOM Node.js + Cheerio

Я пишу приложение изоморфного реагирования и сталкиваюсь с ошибками рендеринга на стороне сервера, такими как document.querySelector is not a function или target.addEventListener is not a function, при использовании определенных внешних библиотек.

Из исследований я пришел к выводу, что Cheerio - лучший вариант для манипулирования DOM на сервере в NodeJS, однако определение правильной реализации остается проблемой.

Подходит ли Cheerio для использования, и если да, как мне реализовать это в моем приложении?


person AloeVeraForty    schedule 31.12.2016    source источник
comment
Я понимаю, что вам нужен querySelector, но я не могу представить, как addEventListener может иметь смысл на сервере.   -  person SOFe    schedule 27.02.2020


Ответы (1)


насколько я знаю, эти команды невозможно запустить на стороне сервера, вместо этого их нужно будет обрабатывать на стороне клиента.

Лучший

person Lucas Matos    schedule 31.12.2016
comment
Нет этой ссылки (maxogden.com/scraping-with-node.html) кажется, предполагает обратное? - person AloeVeraForty; 31.12.2016
comment
Что бы вы посоветовали, исходя из своего опыта, наилучшим образом обойти эти ошибки? - person AloeVeraForty; 31.12.2016
comment
Согласно документации Cheerio, объект документа не указан в документации по API на cheerio.js.org или npmjs.com/package/cheerio#readme - person Lucas Matos; 31.12.2016
comment
Вместо document.querySelector попробуйте использовать метод селектора из cheeiro, реализация селектора Selectors Cheerio почти идентична jQuery, поэтому API очень похож. Селектор $ (selector, [context], [root]) выполняет поиск в пределах контекста, который ищет в пределах корневой области. Селектор и контекст могут быть строковым выражением, элементом DOM, массивом элементов DOM или объектом cheerio. root - это обычно строка документа HTML. - person Lucas Matos; 31.12.2016
comment
Звучит хорошо, но код, который нужно изменить, является частью внешней библиотеки - вот почему я подумал, может быть, я мог бы использовать Cheerio как более глобальное решение, например. интегрировать его где-нибудь в моем приложении, чтобы любые будущие манипуляции с серверной DOM обрабатывались глобально, а не от случая к случаю. Как вы думаете, это возможно? - person AloeVeraForty; 31.12.2016
comment
На основе документации Cheerio - еще один анализатор HTML, вот список некоторых популярных анализаторов HTML en.wikipedia.org / wiki / Comparison_of_HTML_parsers. Затем на стороне сервера вы можете смоделировать свой HTML-код для доставки на клиентскую сторону, но я понимаю, что этот HTML-код не будет отображаться на стороне сервера, этот HTML-код будет отображаться в браузере. - person Lucas Matos; 01.01.2017