Ist es möglich, jQuery-Selektoren / DOM-Manipulationen auf der Serverseite mit Node.js zu verwenden?
javascript
jquery
node.js
John
quelle
quelle
Antworten:
Update (27.06.18) : Es sieht so aus, als ob es ein größeres Update gab,
jsdom
das dazu führt, dass die ursprüngliche Antwort nicht mehr funktioniert. Ich habe diese Antwort gefunden, die erklärt, wie man siejsdom
jetzt benutzt. Ich habe den entsprechenden Code unten kopiert.Hinweis: In der ursprünglichen Antwort wird nicht erwähnt, dass Sie jsdom ebenfalls mit installieren müssen
npm install jsdom
Update (Ende 2013) : Das offizielle jQuery-Team übernahm schließlich die Verwaltung des
jquery
Pakets auf npm:Dann:quelle
require("...").env is not a function
.TypeError: require(...).env is not a function
Ja, Sie können eine von mir erstellte Bibliothek namens nodeQuery verwenden
quelle
, express = Express.createServer();
undTypeError: Express.createServer is not a function
eine Idee?npm install --save express
in Ihrer Eingabeaufforderung.Zum Zeitpunkt des Schreibens gibt es auch das gepflegte Cheerio .
quelle
:gt(1)
Mit jsdom können Sie jetzt. Schauen Sie sich einfach das jquery-Beispiel im Beispielverzeichnis an.
quelle
Ein einfacher Crawler mit Cheerio
Dies ist meine Formel, um einen einfachen Crawler in Node.js zu erstellen. Dies ist der Hauptgrund für die DOM-Manipulation auf der Serverseite und wahrscheinlich der Grund, warum Sie hierher gekommen sind.
Verwenden Sie zunächst
request
, um die zu analysierende Seite herunterzuladen. Wenn der Download abgeschlossen ist, gehen Sie zucheerio
und beginnen mit der DOM-Manipulation, genau wie mit jQuery.Arbeitsbeispiel:
In diesem Beispiel werden alle wichtigen Fragen, die auf der SO-Homepage angezeigt werden, auf der Konsole gedruckt. Deshalb liebe ich Node.js und seine Community. Einfacher geht es nicht :-)
Abhängigkeiten installieren:
Und führen Sie aus (vorausgesetzt, das obige Skript befindet sich in der Datei
crawler.js
):Codierung
Einige Seiten enthalten nicht englischen Inhalt in einer bestimmten Codierung, und Sie müssen ihn dekodieren
UTF-8
. Beispielsweise wird eine Seite in brasilianischem Portugiesisch (oder einer anderen Sprache lateinischen Ursprungs) wahrscheinlich inISO-8859-1
(auch bekannt als "latin1") codiert . Wenn eine Dekodierung erforderlich ist, fordere ich Sierequest
auf, den Inhalt in keiner Weise zu interpretieren und stattdessen zu verwendeniconv-lite
für die Arbeit zu verwenden.Arbeitsbeispiel:
Installieren Sie vor dem Ausführen Abhängigkeiten:
Und dann endlich:
Folgende Links
Der nächste Schritt wäre, Links zu folgen. Angenommen, Sie möchten alle Poster aus jeder Top-Frage auf SO auflisten. Sie müssen zuerst alle Top-Fragen auflisten (Beispiel oben) und dann jeden Link eingeben und die Seite jeder Frage analysieren, um die Liste der beteiligten Benutzer zu erhalten.
Wenn Sie Links folgen, kann eine Rückruf-Hölle beginnen. Um dies zu vermeiden, sollten Sie Versprechen, Futures oder was auch immer verwenden. Ich halte immer asynchron in meinem Werkzeuggürtel. Hier ist ein vollständiges Beispiel für einen Crawler, der Async verwendet:
Vor dem Laufen:
Führen Sie einen Test durch:
Beispielausgabe:
Und das ist die Grundvoraussetzung, die Sie kennen sollten, um Ihre eigenen Crawler zu erstellen :-)
Verwendete Bibliotheken
quelle
2016 ist es viel einfacher. Installieren Sie jquery auf node.js mit Ihrer Konsole:
Binden Sie es an die Variable
$
(zum Beispiel - ich bin daran gewöhnt) in Ihrem node.js-Code:Sachen machen:
funktioniert auch für gulp, da es auf node.js basiert.
quelle
var $ = require("jquery"); $.ajax // undefined
(momentan heruntergestimmt).npm install jquery
zuerst getan hast ?> console.log(require("jquery").toString());
gibt mir die Factory-Funktion:function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
Ich musste die obige Antwort mit jsdom verwenden: stackoverflow.com/a/4129032/539490Ich glaube, die Antwort darauf lautet jetzt ja.
https://github.com/tmpvar/jsdom
quelle
npm install jquery --save
#note ALL LOWERCASEnpm install jsdom --save
quelle
Das jQuery-Modul kann installiert werden mit:
Beispiel:
Referenzen von jQuery in Node.js **:
quelle
Sie müssen das Fenster mit der neuen JSDOM-API abrufen.
quelle
...
) sollte für die HTML5-Unterstützung .JSDOM ("<! DOCTYPE html>") sein.WARNUNG
Diese von Golo Roden erwähnte Lösung ist nicht korrekt . Es ist nur eine schnelle Lösung, um den Benutzern zu helfen, ihren tatsächlichen jQuery-Code mithilfe einer Node-App-Struktur auszuführen. Es handelt sich jedoch nicht um eine Node-Philosophie, da die jQuery weiterhin auf der Clientseite und nicht auf der Serverseite ausgeführt wird. Es tut mir leid, dass ich eine falsche Antwort gegeben habe.
Sie können Jade auch mit Knoten rendern und Ihren jQuery-Code einfügen. Hier ist der Code der Jade-Datei:
quelle
Mein Arbeitscode lautet:
und dann:
oder wenn das Fenster vorhanden ist, dann:
quelle
Das Modul jsdom ist ein großartiges Werkzeug. Aber wenn Sie ganze Seiten auswerten und auf der Serverseite ein paar funky Sachen machen möchten, schlage ich vor, sie in ihrem eigenen Kontext auszuführen:
Dinge wie
require
/CommonJS
vor Ort werden also Ihren Knotenprozess selbst nicht in die Luft jagen.Dokumentation finden Sie hier . Prost!
quelle
Ab jsdom v10 ist die Funktion .env () veraltet. Ich habe es wie unten beschrieben gemacht, nachdem ich viele Dinge ausprobiert hatte, um eine Abfrage zu erfordern:
Ich hoffe, dies hilft Ihnen oder allen, die mit solchen Problemen konfrontiert waren.
quelle
TypeError: JSDOM is not a constructor
$.each
. Ich habe gerade diese Zeilen eingefügt und es dann wie folgt gemacht:$.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
Hoffe das hilft !!Installieren Sie es zuerst
Nach der Installation können Sie es wie folgt verwenden
Sie können sich ein vollständiges Tutorial ansehen, das ich hier geschrieben habe: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
quelle
Keine dieser Lösungen hat mir in meiner Electron App geholfen.
Meine Lösung (Problemumgehung):
In Ihrer
index.js
Datei:.js
Schreiben Sie Ihre jQuery-Funktionen in Ihre Dateien folgendermaßen:quelle
Ja,
jQuery
kann mit verwendet werdenNode.js
.Schritte zum Einfügen von jQuery in das Knotenprojekt: -
npm i jquery --save
Fügen Sie jquery in Codes einIch verwende jquery die ganze Zeit in node.js-Projekten, speziell im Projekt der Chrome-Erweiterung.
zB https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
quelle
Nein. Es wird eine ziemlich große Anstrengung sein, eine Browserumgebung auf den Knoten zu portieren.
Ein anderer Ansatz, den ich derzeit für Unit-Tests untersuche, besteht darin, eine "Mock" -Version von jQuery zu erstellen, die bei jedem Aufruf eines Selektors Rückrufe bereitstellt.
Auf diese Weise können Sie Ihre jQuery-Plugins ohne DOM testen. Sie müssen immer noch in echten Browsern testen, um festzustellen, ob Ihr Code in freier Wildbahn funktioniert. Wenn Sie jedoch browserspezifische Probleme entdecken, können Sie diese auch in Ihren Komponententests leicht "verspotten".
Ich werde etwas an github.com/felixge senden, sobald es fertig ist.
quelle
Sie können Electron verwenden , es erlaubt hybride Browser und Knoten.
Früher habe ich versucht, canvas2d in nodejs zu verwenden, aber schließlich habe ich aufgegeben. Es wird von NodeJS Standard nicht unterstützt und ist zu schwer zu installieren (viele, viele ... Abhängigkeiten). Bis ich Electron verwende, kann ich problemlos meinen gesamten vorherigen Browser-Code, sogar WebGL, verwenden und den Ergebniswert (z. B. Ergebnis-Base64-Bilddaten) an den Knoten-Code übergeben.
quelle
Nicht, dass ich davon Wüste. Das DOM ist eine clientseitige Sache (jQuery analysiert nicht den HTML-Code, sondern das DOM).
Hier sind einige aktuelle Node.js-Projekte:
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
Und SimonWs Djangode ist verdammt cool ...
quelle
Eine Alternative ist die Verwendung von Underscore.js . Es sollte das bereitstellen, was Sie sich von JQuery für den Server gewünscht haben.
quelle