Est-il possible d'utiliser les sélecteurs jQuery et la manipulation du DOM côté serveur en utilisant Node.js ?
Est-il possible d'utiliser jQuery ajax depuis node.js avec ce module npm ?
Est-il possible d'utiliser les sélecteurs jQuery et la manipulation du DOM côté serveur en utilisant Node.js ?
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); });~~
Ne s'installe pas sous Windows (sans important ), dans ce cas je vous recommande le module Cheerio : matthewmueller.github.com/cheerio
+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).
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);
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.
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 ?
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.
Utilisation de jsdom vous le pouvez maintenant. Il suffit de regarder leur exemple jquery dans le répertoire des exemples.
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);
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.
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.
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.
2 votes
@deeperx La manipulation du DOM du côté du serveur pourrait être utile lors de la création d'un crawler. Voir cette réponse .
0 votes
OUI - jetez un coup d'œil à cette réponse - Je préfère cette méthode à l'utilisation de cheerio, car vous bénéficiez de toute la puissance du sélecteur jQuery.