Можно ли использовать селекторы jQuery / манипулирование DOM на стороне сервера с помощью Node.js?
javascript
jquery
node.js
Джон
источник
источник
Ответы:
Обновление (27 июня 18) : похоже, что произошло серьезное обновление
jsdom
, из-за которого оригинальный ответ больше не работает. Я нашел этот ответ, который объясняет, как использоватьjsdom
сейчас. Я скопировал соответствующий код ниже.Примечание. В первоначальном ответе не упоминается, что вам также потребуется установить jsdom, используя
npm install jsdom
Обновление (конец 2013 г.) : Официальная команда jQuery наконец-то взяла на себя управление
jquery
пакетом на npm:Затем:источник
require("...").env is not a function
.TypeError: require(...).env is not a function
Да, вы можете, используя созданную мной библиотеку под названием nodeQuery
источник
, express = Express.createServer();
аTypeError: Express.createServer is not a function
есть идеи?npm install --save express
в командной строке.На момент написания статьи также есть поддерживаемый Cheerio .
источник
:gt(1)
Используя jsdom, вы теперь можете. Просто посмотрите на их пример jquery в каталоге примеров.
источник
Простой сканер, использующий Cheerio
Это моя формула сделать простой сканер в Node.js. Это основная причина желания манипулировать DOM на стороне сервера и, возможно, именно поэтому вы попали сюда.
Во-первых, используйте
request
для загрузки страницы для анализа. Когда загрузка будет завершена, обработайте ееcheerio
и начните манипулирование DOM так же, как с помощью jQuery.Рабочий пример:
Этот пример выведет на консоль все основные вопросы, отображаемые на домашней странице SO. Вот почему я люблю Node.js и его сообщество. Это не могло быть легче, чем это :-)
Установить зависимости:
И запустить (при условии, что приведенный выше скрипт находится в файле
crawler.js
):кодирование
Некоторые страницы будут содержать неанглийский контент в определенной кодировке, и вам нужно будет его декодировать
UTF-8
. Например, страница на бразильском португальском языке (или любом другом языке латинского происхождения), вероятно, будет закодирована вISO-8859-1
(иначе, как «latin1»). Когда требуется декодирование, я советуюrequest
не интерпретировать содержимое, а использовать егоiconv-lite
для выполнения работы.Рабочий пример:
Перед запуском установите зависимости:
И вот наконец:
Следующие ссылки
Следующим шагом будет переход по ссылкам. Скажем, вы хотите перечислить все постеры с каждого главного вопроса на SO. Вы должны сначала перечислить все главные вопросы (пример выше), а затем ввести каждую ссылку, анализируя страницу каждого вопроса, чтобы получить список вовлеченных пользователей.
Когда вы начинаете переходить по ссылкам, может начаться ад обратного вызова . Чтобы избежать этого, вы должны использовать какие-то обещания, фьючерсы или что-то еще. Я всегда держу асинхронный в своем инструментальном поясе. Итак, вот полный пример сканера, использующего async:
Перед запуском:
Запустите тест:
Пример вывода:
И это основное, что вы должны знать, чтобы начать создавать свои собственные сканеры :-)
Используемые библиотеки
источник
в 2016 году все намного проще. установите jquery в node.js с вашей консоли:
свяжите его с переменной
$
(например, я привык к ней) в вашем коде node.js:делать вещи:
также работает для gulp, так как он основан на node.js.
источник
var $ = require("jquery"); $.ajax // undefined
(на данный момент не голосуем ).npm install jquery
первым?> console.log(require("jquery").toString());
дает мне фабричную функцию:function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
я должен был использовать ответ выше с jsdom: stackoverflow.com/a/4129032/539490Я считаю, что ответ на этот вопрос теперь да.
https://github.com/tmpvar/jsdom
источник
npm install jquery --save
#note ВСЕ LOWERCASEnpm install jsdom --save
источник
Модуль jQuery можно установить с помощью:
Пример:
Ссылки jQuery в Node.js **:
источник
Вы должны получить окно, используя новый JSDOM API.
источник
...
) должен быть .JSDOM ("<! DOCTYPE html>") для поддержки HTML5?ПРЕДУПРЕЖДЕНИЕ
Это решение, как упоминал Голо Роден , не является правильным . Это просто быстрое решение, помогающее людям запускать свой реальный код jQuery с использованием структуры приложения Node, но это не философия Node, поскольку jQuery все еще работает на стороне клиента, а не на стороне сервера. Я прошу прощения за неправильный ответ.
Вы также можете визуализировать Jade с помощью узла и поместить свой код jQuery внутрь. Вот код файла Jade:
источник
Мой рабочий код:
а потом:
или если окно присутствует, то:
источник
Модуль jsdom - отличный инструмент. Но если вы хотите оценить целые страницы и сделать что-нибудь интересное на их стороне сервера, я предлагаю запустить их в их собственном контексте:
Такие вещи, как
require
/CommonJS
на сайте, не повредят самому процессу Node.Вы можете найти документацию здесь . Ура!
источник
Начиная с jsdom v10, функция .env () устарела. Я сделал это, как показано ниже, после того, как многие вещи требовали jquery:
Надеюсь, что это поможет вам или любому, кто сталкивался с такими проблемами.
источник
TypeError: JSDOM is not a constructor
$.each
. Я просто включил эти строки, а затем сделал это, как показано ниже:$.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
Надеюсь, это поможет!Прежде всего установите его
После установки вы можете использовать его, как показано ниже
Вы можете ознакомиться с полным руководством, которое я написал здесь: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
источник
Ни одно из этих решений не помогло мне в моем приложении «Электрон».
Мое решение (обходной путь):
В вашем
index.js
файле:В ваших
.js
файлах напишите ваши функции jQuery следующим образом:источник
Да,
jQuery
можно использовать сNode.js
.Шаги для включения jQuery в проект узла: -
npm i jquery --save
Включить jquery в кодыЯ использую jquery в проектах node.js все время, особенно в проекте расширения chrome.
например, https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
источник
Нет. Это будет довольно большая попытка перенести среду браузера на узел.
Другой подход, который я сейчас изучаю для модульного тестирования, заключается в создании «пробной» версии jQuery, которая обеспечивает обратные вызовы при каждом вызове селектора.
Таким образом, вы можете тестировать свои плагины jQuery, не имея DOM. Вам все равно придется тестировать в реальных браузерах, чтобы увидеть, работает ли ваш код в открытом режиме, но если вы обнаружите специфичные для браузера проблемы, вы также можете легко «насмехаться» над ними в своих модульных тестах.
Я добавлю что-нибудь на github.com/felixge, как только он будет готов к показу.
источник
Вы можете использовать Electron , он допускает гибридные browserjs и nodejs.
Раньше я пытался использовать canvas2d в nodejs, но в конце концов я сдался. Он не поддерживается по умолчанию для nodejs, и его слишком сложно установить (много-много ... зависимостей). Пока я не использую Electron, я могу легко использовать весь свой предыдущий код browserjs, даже WebGL, и передавать значение результата (например, данные изображения base64) в код nodejs.
источник
Не то, что я знаю из. DOM - это вещь на стороне клиента (jQuery анализирует не HTML, а DOM).
Вот некоторые текущие проекты Node.js:
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
И Djangode SimonW чертовски круто ...
источник
Альтернативой является использование Underscore.js . Он должен предоставить то, что вы, возможно, хотели на стороне сервера от JQuery.
источник