2016-05-15 9 views
6
$.getJSON('https://api.twitch.tv/kraken/channels/' + SLoppierKitty7, function(channel) { 

if (channel["stream"] == null) { 
    var live ="no" 

} else { 

     var live ="yes" 

} 

, dass mein Code, aber wenn ich es laufen bekomme ich folgende FehlerNodeJS jQuery benötigt jsdom

E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js:5 window = require('jsdom').jsdom().createWindow(); ^

TypeError: require(...).jsdom(...).createWindow is not a function at create (E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js:5:39) at E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js:9435:18 at Object. (E:\Sloppers bot\node_modules\jQuery\lib\node-jquery.js:9437:2) at Module._compile (module.js:434:26) at Object.Module._extensions..js (module.js:452:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Module.require (module.js:365:17) at require (module.js:384:17) at Object. (E:\Sloppers bot\bot.js:2:9)

Was kann ich tun

dies für einen Bot arbeite ich

+0

Gibt es einen Grund, warum Sie jQuery verwenden möchten, um JSON-Daten in NodeJs anzufordern? –

+0

Sofern Sie keine JQuery über $ .getJSON benötigen, würde ich empfehlen, https://www.npmjs.com/package/request zu verwenden, das ein einfacherer Wrapper um das native HTTP-Modul von Node ist. – tmslnz

Antwort

0

Ja, tut es. jQuery erwartet das "Fenster", das normalerweise ein reines Browser-Objekt ist. Daher muss das Fenster simuliert werden. Das macht jsdom.

Nach einschließlich jsdom (npm install jsdom):

// Load jsdom, and create a window. 
var jsdom = require("jsdom").jsdom; 
var doc = jsdom(); 
var window = doc.defaultView; 

// Load jQuery with the simulated jsdom window. 
$ = require('jquery')(window); 

Siehe jsdom Dokumentation für weitere Informationen: https://www.npmjs.com/package/jsdom

+0

https://i.gyazo.com/41235c1ff6f7952fd11cb3e10f926f67.png – SloppierKitty7

+0

ist jsdom im Verzeichnis node_modules oder irgendwo anders, wo es mit 'require' geladen werden kann? – TinkerTank

+0

es ist in node_modules – SloppierKitty7

7

ich das gleiche Problem gestoßen, und es ist jetzt OK, nachdem ich das Paket von require('jQuery') geändert zu require('jquery'). Es scheint, dass das spätere Paket (jquery) eine neuere Version von jQuery verwendet als die vorherige (jQuery).

+0

das hilft nicht. –

+0

danke Mann, ich habe es getan. –

0

nichts funktionierte für mich von hier,

meine Jquery Version: 3.2.1

jsdom Version: 10.1.0 eine Lösung schließlich gefunden:

var myHtmlString = 'akkadsf lakuseh alhf lasudfa ls<p></p>'; 

function jQuery(doc){ 
    const jsdom = require("jsdom"); 
    const { JSDOM } = jsdom; 
    const { window } = new JSDOM(); 
    const JQ = require("jquery")(window)(`<html>${doc || ''}</html>`); 
} 
var $ = jQuery; 
// my html string: 
var text = $(myHtmlString).text(); 
+0

funktioniert immer noch nicht für mich: 'TypeError: $ .getJSON ist keine Funktion' – anunixercoder

10

jquery 3.2.1, Jsdom 10.1.0. Es klappt.

const jsdom = require("jsdom"); 
const { JSDOM } = jsdom; 
const { window } = new JSDOM(`<!DOCTYPE html>`); 
const $ = require('jQuery')(window); 

$('<h1>Hello</h1>').appendTo('body'); 
console.log($('h1').text()); 
+0

Perfekt! Alle Codebeispiele, die ich fand, waren für die veraltete JSDOM-Syntax. Vielen Dank! :) – rinogo

+0

'jQuery' -> 'jquery' macht das für mich funktioniert. – pizzaisdavid

1

Ich konfrontiert das gleiche Problem, und während des Debuggen kam ich über etwas Neues wissen.

Wenn Sie das tun -

npm install jQuery 

Es installiert die jQuery-Version 1.7.4 auf Ihrem Projekt. Und

wenn Sie das tun -

npm install jquery 

Es installiert die jQuery-Version 3.2.1 zu Ihrem Projekt.

enter image description here

Die Differenz zwischen den beiden Befehl ist nur der Groß Q. Wenn Sie diesen Fehler erhalten, verwenden Sie wahrscheinlich die alte Version von jQuery.

Sie können mehr über den ersten Befehl (die alte Version) here und über den zweiten Befehl lesen.