2016-08-09 52 views
0

Ich versuche, eine lokale jquery.js zu laden in node.js NPM jsdom gemäß dem Beispiel:Kann eine lokale jquery.js in node.js laden (NPM jsdom)

var jsdom = require("jsdom"); 
var fs = require("fs"); 
var jquery = fs.readFileSync("c:/test/js/jquery.js", "utf-8"); // here it reads the jquery file from local disk 

jsdom.env(
    "http://somewebsite.com", 
    [jquery], 
    function (err, window) { 
    var $ = window.$; 
    console.log("HN Links"); 
    $("td.title:not(:last) a").each(function() { 
     console.log(" -", $(this).text()); 
    }); 
    } 
); 

Und es gibt den Fehler unten:

window.$(".detLink")[0].text 
    ^

TypeError: window.$ is not a function 
    at Object.done (C:\test.js:59:13) 
    at C:\nodeJS\node_modules\jsdom\lib\jsdom.js:320:18 
    at nextTickCallbackWith0Args (node.js:420:9) 
    at process._tickCallback (node.js:349:13) 

es funktioniert nur, wenn ich die jquery von einigen Online-CDN abrufen:

jsdom.env(
    "http://somewebsite.com", 
    ["http://code.jquery.com/jquery.js"], // here it reads the jquery from CDN 
    function (err, window) { 
    var $ = window.$; 
    console.log("HN Links"); 
    $("td.title:not(:last) a").each(function() { 
     console.log(" -", $(this).text()); 
    }); 
    } 
); 

Die lokale jQuery ist genau dieselbe von der CDN.

Antwort

0

Vielleicht sollten Sie mit cheerio, betrachten, die eine "schnelle, flexible und schlanke Implementierung von Kern jQuery speziell für den Server entwickelt": https://github.com/cheeriojs/cheerio

Beispiel Anwendungsfall:

return request-promise(options) 
    .then((response) => { 
     if (response.statusCode === 200) { 
      const $ = cheerio.load(response.body); 
      // do something 
     } 
    }) 
    .catch((err) => { console.log(`Url request error: ${err}, ${url}`); }); 

request-promise ist ein npm-Paket: https://www.npmjs.com/package/request-promise

+0

Ich versuche genau das Gegenteil zu tun. Ich möchte nicht die jquery aus Online-Quellen abrufen, ich möchte es von lokalen geladen werden. – Azevedo

+0

Und warum wären deine Bedürfnisse nicht zufrieden, wenn du 'cheerio' benutzt hättest? –

+0

Warum sollte ich in erster Linie Cheerio brauchen? Der Punkt dieser Frage ist, jquery ** LOCALLY ** nicht entfernt zu laden. Ich habs? – Azevedo