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

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

} else { 

     var live ="yes" 

} 

to jest mój kod, ale gdy uruchamiam go i pojawia się następujący błądNodejs jQuery potrzebuje 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)

co mam zrobić

To jest dla bota pracuję

+0

Czy istnieje powód, dla którego chcesz używać jquery do żądania danych json w nodejs? –

+0

Jeśli nie potrzebujesz jquery poza $ .getJSON, proponuję użyć https://www.npmjs.com/package/request, który jest prostszym opakowaniem dla natywnego modułu HTTP Node. – tmslnz

Odpowiedz

0

Tak, robi. jQuery spodziewa się, że będzie tam "okno", które zwykle jest obiektem przeglądarkowym. W związku z tym okno musi zostać zasymulowane. Tak właśnie robi jsdom.

Po tym 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); 

Zobacz dokumentację jsdom uzyskać więcej informacji: https://www.npmjs.com/package/jsdom

+0

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

+0

to jsdom w katalogu node_modules lub gdziekolwiek indziej, gdzie można go załadować z "require"? – TinkerTank

+0

to jest w node_modules – SloppierKitty7

7

natknąłem się ten sam problem, i to jest OK, teraz po zmianie pakietu z require('jQuery') do require('jquery'). Wygląda na to, że późniejszy pakiet (jquery) używa nowszej wersji jQuery niż poprzednia (jQuery).

+0

to nie pomaga. –

+0

dzięki człowiekowi, zrobiłem to. –

0

nic nie działało na mnie stąd,

moja wersja jQuery: 3.2.1

wersja jsdom: 10.1.0 wreszcie znalazł rozwiązanie:

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

nadal nie działa dla mnie: 'TypeError: $ .getJSON nie jest funkcją' – anunixercoder

10

jQuery 3.2.1, jsdom 10.1.0. To działa.

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

Idealny! Wszystkie przykłady kodu, które znalazłem, dotyczyły przestarzałej składni JSDOM. Dzięki wielkie! :) – rinogo

+0

'jQuery' -> 'jquery' sprawia, że ​​to działa dla mnie. – pizzaisdavid

1

Zmierzyłem się z tym samym problemem i podczas debugowania dowiedziałem się o czymś nowym.

Kiedy robisz -

npm install jQuery 

Instaluje jQuery w wersji 1.7.4 do projektu.

A kiedy zrobisz -

npm install jquery 

Instaluje wersję jQuery 3.2.1 do projektu.

enter image description here

Różnica pomiędzy oboma polecenia jest tylko wielkie P. Jeśli otrzymujesz ten błąd, prawdopodobnie używasz starej wersji jQuery.

Możesz przeczytać więcej o pierwszym poleceniu (stara wersja) here oraz o drugim poleceniu here.

Powiązane problemy