Est-il possible d'utiliser des sélecteurs jQuery / manipulation DOM côté serveur en utilisant Node.js?
javascript
jquery
node.js
John
la source
la source
Réponses:
Mise à jour (27-juin-18) : Il semble qu'il y ait eu une mise à jour majeure
jsdom
qui empêche la réponse d'origine de fonctionner. J'ai trouvé cette réponse qui explique comment l'utiliserjsdom
maintenant. J'ai copié le code correspondant ci-dessous.Remarque: La réponse d'origine ne mentionne pas que vous devrez également installer jsdom en utilisant
npm install jsdom
Mise à jour (fin 2013) : L'équipe officielle de jQuery a finalement repris la gestion du
jquery
package sur npm:Alors:la source
require("...").env is not a function
.TypeError: require(...).env is not a function
Oui, vous pouvez, en utilisant une bibliothèque que j'ai créée appelée nodeQuery
la source
, express = Express.createServer();
etTypeError: Express.createServer is not a function
une idée?npm install --save express
dans votre invite de commande.Au moment de la rédaction, il y a aussi le Cheerio maintenu .
la source
:gt(1)
Vous pouvez désormais utiliser jsdom . Regardez simplement leur exemple jquery dans le répertoire examples.
la source
Un robot simple utilisant Cheerio
Voici ma formule pour créer un robot simple dans Node.js. C'est la principale raison de vouloir faire une manipulation DOM du côté serveur et c'est probablement la raison pour laquelle vous êtes arrivé ici.
Tout d'abord, utilisez
request
pour télécharger la page à analyser. Une fois le téléchargement terminé, gérez-lecheerio
et commencez la manipulation du DOM comme si vous utilisiez jQuery.Exemple de travail:
Cet exemple imprimera à la console toutes les principales questions affichées sur la page d'accueil SO. C'est pourquoi j'aime Node.js et sa communauté. Rien de plus simple :-)
Installer les dépendances:
Et exécutez (en supposant que le script ci-dessus est dans le fichier
crawler.js
):Codage
Certaines pages auront un contenu non anglais dans un certain encodage et vous devrez le décoder
UTF-8
. Par exemple, une page en portugais brésilien (ou toute autre langue d'origine latine) sera probablement codéeISO-8859-1
(aka "latin1"). Lorsque le décodage est nécessaire, je dis derequest
ne pas interpréter le contenu de quelque manière que ce soit et de l'utilisericonv-lite
à la place pour faire le travail.Exemple de travail:
Avant d'exécuter, installez les dépendances:
Et puis finalement:
Liens suivants
La prochaine étape serait de suivre les liens. Supposons que vous souhaitiez répertorier toutes les affiches de chaque question principale sur SO. Vous devez d'abord répertorier toutes les principales questions (exemple ci-dessus), puis entrer chaque lien, en analysant la page de chaque question pour obtenir la liste des utilisateurs impliqués.
Lorsque vous commencez à suivre des liens, un enfer de rappel peut commencer. Pour éviter cela, vous devez utiliser une sorte de promesses, de futurs ou autre. Je garde toujours asynchrone dans ma ceinture d'outils. Voici donc un exemple complet d'un robot utilisant async:
Avant de courir:
Exécutez un test:
Exemple de sortie:
Et c'est la base que vous devez savoir pour commencer à créer vos propres robots :-)
Bibliothèques utilisées
la source
en 2016, les choses sont beaucoup plus faciles. installez jquery sur node.js avec votre console:
le lier à la variable
$
(par exemple - je suis habitué) dans votre code node.js:faire des trucs:
fonctionne également pour gulp car il est basé sur node.js.
la source
var $ = require("jquery"); $.ajax // undefined
(Downvoted for the moment).npm install jquery
premier?> console.log(require("jquery").toString());
me donne la fonction d'usine:function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
j'ai dû utiliser la réponse ci-dessus avec jsdom: stackoverflow.com/a/4129032/539490Je crois que la réponse à cette question est maintenant oui.
https://github.com/tmpvar/jsdom
la source
npm install jquery --save
#note TOUT EN MAJUSCULEnpm install jsdom --save
la source
Le module jQuery peut être installé en utilisant:
Exemple:
Références de jQuery dans Node.js **:
la source
Vous devez obtenir la fenêtre en utilisant la nouvelle API JSDOM.
la source
...
) devrait être .JSDOM ("<! DOCTYPE html>") pour la prise en charge HTML5?ATTENTION
Cette solution, comme l'a mentionné Golo Roden, n'est pas correcte . C'est juste une solution rapide pour aider les gens à faire fonctionner leur code jQuery réel à l'aide d'une structure d'application Node, mais ce n'est pas la philosophie Node car le jQuery fonctionne toujours côté client plutôt que côté serveur. Je suis désolé d'avoir donné une mauvaise réponse.
Vous pouvez également rendre Jade avec un nœud et y mettre votre code jQuery. Voici le code du fichier jade:
la source
Mon code de travail est:
et alors:
ou si la fenêtre est présente, alors:
la source
Le module jsdom est un excellent outil. Mais si vous voulez évaluer des pages entières et faire des trucs géniaux côté serveur, je vous suggère de les exécuter dans leur propre contexte:
Ainsi, des choses comme
require
/CommonJS
on site ne feront pas exploser votre processus Node lui-même.Vous pouvez trouver la documentation ici . À votre santé!
la source
Depuis jsdom v10, la fonction .env () est obsolète. Je l'ai fait comme ci-dessous après avoir essayé beaucoup de choses pour exiger jquery:
J'espère que cela vous aidera, vous ou toute personne confrontée à ce type de problèmes.
la source
TypeError: JSDOM is not a constructor
$.each
. Je viens d'inclure ces lignes, puis je l'ai fait comme ci-dessous:$.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
J'espère que cela aide !!Tout d'abord l'installer
Après l'avoir installé, vous pouvez l'utiliser comme ci-dessous
Vous pouvez consulter un tutoriel complet que j'ai écrit ici: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
la source
Aucune de ces solutions ne m'a aidé dans mon application Electron.
Ma solution (solution de contournement):
Dans votre
index.js
dossier:Dans vos
.js
fichiers, écrivez vos fonctions jQuery de cette façon:la source
Oui,
jQuery
peut être utilisé avecNode.js
.Étapes pour inclure jQuery dans le projet de noeud: -
npm i jquery --save
Inclure jquery dans les codesJ'utilise jquery dans les projets node.js tout le temps spécifiquement dans le projet de l'extension chrome.
par exemple https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
la source
Non. Ce sera un gros effort de porter un environnement de navigateur sur un nœud.
Une autre approche, que j'étudie actuellement pour les tests unitaires, consiste à créer une version "fictive" de jQuery qui fournit des rappels chaque fois qu'un sélecteur est appelé.
De cette façon, vous pouvez tester vos plugins jQuery sans avoir de DOM. Vous devrez toujours tester dans de vrais navigateurs pour voir si votre code fonctionne à l'état sauvage, mais si vous découvrez des problèmes spécifiques au navigateur, vous pouvez facilement "simuler" ceux de vos tests unitaires.
Je pousserai quelque chose sur github.com/felixge une fois qu'il sera prêt à être diffusé.
la source
Vous pouvez utiliser Electron , il autorise les browserjs hybrides et les nodejs.
Avant, j'essayais d'utiliser canvas2d dans nodejs, mais finalement j'ai abandonné. Il n'est pas pris en charge par nodejs par défaut, et trop difficile à installer (beaucoup de ... dépendances). Jusqu'à ce que j'utilise Electron, je peux facilement utiliser tout mon code de navigateur précédent, même WebGL, et transmettre la valeur du résultat (par exemple, les données d'image de base64 du résultat) au code nodejs.
la source
Pas que je sache de. Le DOM est une chose côté client (jQuery n'analyse pas le HTML, mais le DOM).
Voici quelques projets Node.js en cours:
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
Et le djangode de SimonW est sacrément cool ...
la source
Une alternative consiste à utiliser Underscore.js . Il devrait fournir ce que vous auriez pu vouloir côté serveur de JQuery.
la source