608 votes

Puis-je utiliser jQuery avec Node.js ?

Est-il possible d'utiliser les sélecteurs jQuery et la manipulation du DOM côté serveur en utilisant Node.js ?

4 votes

Je me demande : Pourquoi utiliser le côté serveur alors que vous pouvez le faire du côté client ?

37 votes

Peut-être souhaitez-vous créer un scrapper web qui récupère des informations spécifiques à intervalles réguliers et stocke les résultats dans une base de données ? Cela ne serait pas aussi pratique du côté client.

3 votes

Vous devriez également jeter un coup d'œil à phantomjs, qui vous permet d'émuler un navigateur côté serveur avec le moteur V8.

581voto

Philippe Rathé Points 3731

Mise à jour (27-Jun-18) : Il semble qu'il y ait eu une mise à jour majeure de jsdom qui fait que la réponse originale ne fonctionne plus. J'ai trouvé ce réponse qui explique comment utiliser jsdom maintenant. J'ai copié le code correspondant ci-dessous.

var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;

var $ = jQuery = require('jquery')(window);

Note : La réponse originale ne mentionne pas qu'il vous faudra également installer jsdom en utilisant npm install jsdom

Mise à jour (fin 2013) : L'équipe officielle de jQuery a finalement pris en charge la gestion de l'application jquery sur npm :

npm install jquery

Ensuite :

~~require("jsdom").env("", function (err, window) { if (err) { console.error(err); return; } var $ = require("jquery")(window); });~~

43 votes

Est-il possible d'utiliser jQuery ajax depuis node.js avec ce module npm ?

22 votes

Ne s'installe pas sous Windows (sans important ), dans ce cas je vous recommande le module Cheerio : matthewmueller.github.com/cheerio

8 votes

+1 pour avoir indiqué où obtenir npm :) la plupart des gens ont la mauvaise habitude de mentionner des choses comme si elles étaient évidentes (bon sens).

59voto

Thomas Blobaum Points 1097

Oui, vous pouvez, en utilisant une bibliothèque que j'ai créée et qui s'appelle nodeQuery

var Express = require('express')
    , dnode = require('dnode')
    , nQuery = require('nodeQuery')
    , express = Express.createServer();

var app = function ($) {
    $.on('ready', function () {
        // do some stuff to the dom in real-time
        $('body').append('Hello World');
        $('body').append('<input type="text" />');
        $('input').live('click', function () {
            console.log('input clicked');
            // ...
        });
    });
};

nQuery
    .use(app);

express
    .use(nQuery.middleware)
    .use(Express.static(__dirname + '/public'))
    .listen(3000);

dnode(nQuery.middleware).listen(express);

20 votes

Notez que nodeQuery change en fait la page de l'utilisateur en temps réel, ce qui est encore plus cool que ce à quoi on pourrait s'attendre.

0 votes

Je cherchais quelque chose comme ça quand je suis tombé ici... Je viens de regarder les paquets nQuery et jquery node et nQuery a été mis à jour il y a un an alors que jquery l'a été hier... Est-ce que nQuery n'est plus développé ? et est-ce que jquery affecte le côté client comme le fait nQuery ? Quelqu'un a-t-il essayé les deux ?

2 votes

La différence est que le code est exécuté sur le serveur et, plutôt que de fournir le code jquery au navigateur, il exécute le code sur le serveur et exécute à distance la manipulation dom aux navigateurs connectés. Notez également que nQuery était un projet expérimental et que, bien que j'accepte les demandes de modification pour corriger les bogues, il n'a jamais été créé dans un but ou un projet spécifique et n'a donc pas fait l'objet de nombreuses modifications.

56voto

Alfred Points 32190

Au moment de la rédaction de cet article, il y a également le maintenu Cheerio .

Une mise en œuvre rapide, flexible et légère du noyau de jQuery conçu spécifiquement pour le serveur.

2 votes

+1 pour Cheerio. jsdom, par contre, est vraiment pénible à faire fonctionner sous Windows.

1 votes

Cheerio peut-il utiliser des événements différés et des appels ajax ?

6 votes

Ne prend pas en charge un grand nombre de sélecteurs comme :gt(1)

39voto

Benjamin Coe Points 279

Utilisation de jsdom vous le pouvez maintenant. Il suffit de regarder leur exemple jquery dans le répertoire des exemples.

20voto

rdzah Points 115

Je crois que la réponse à cette question est maintenant oui.
https://github.com/tmpvar/jsdom

var navigator = { userAgent: "node-js" };  
var jQuery = require("./node-jquery").jQueryInit(window, navigator);

9 votes

Je suis désolé de vous annoncer qu'il faudra encore travailler pour que jQuery fonctionne sur jsdom. Cependant, Sizzle fonctionne ! Je veux vraiment garder jsdom aussi léger que possible, donc ajouter une émulation complète du navigateur comme env.js n'est pas vraiment une priorité pour le moment.

0 votes

C'est pas grave, j'ai trouvé la copie modifiée qui est fournie avec jsdom.

0 votes

Pour info, node-jquery est désormais obsolète et remplacé par jquery.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X