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

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

} else { 

     var live ="yes" 

} 

che è il mio codice, ma quando ho eseguito io ottenere il seguente erroreNodejs jQuery ha bisogno 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)

cosa faccio

questo è per un bot sto lavorando

+0

C'è un motivo per cui si desidera utilizzare jquery per richiedere dati json in nodejs? –

+0

A meno che non si abbia bisogno di jquery oltre $ .getJSON, suggerirei di usare https://www.npmjs.com/package/request che è un involucro più semplice del modulo nativo HTTP di Node. – tmslnz

risposta

0

Sì, lo fa. jQuery si aspetta che la 'finestra' sia lì, che normalmente è un oggetto solo per browser. Come tale, la finestra deve essere simulata. Questo è ciò che fa jsdom.

Dopo aver incluso 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); 

Vedere la documentazione jsdom per ulteriori informazioni: https://www.npmjs.com/package/jsdom

+0

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

+0

è jsdom nella directory node_modules o altrove dove può essere caricato con 'require'? – TinkerTank

+0

è in node_modules – SloppierKitty7

7

ho incontrato lo stesso problema, ed è OK ora dopo ho cambiato il pacchetto da require('jQuery') a require('jquery'). Sembra che il pacchetto successivo (jquery) utilizzi una versione più recente di jQuery rispetto alla precedente (jQuery).

+0

che non aiuta. –

+0

grazie amico l'ho fatto. –

0

niente ha funzionato per me da qui,

mia versione jQuery: 3.2.1

versione jsdom: 10.1.0 trovato una soluzione, infine:

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

non funziona ancora per me: 'TypeError: $ .getJSON non è una funzione ' – anunixercoder

10

jQuery 3.2.1, jsdom 10.1.0. Funziona.

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

Perfetto! Tutti gli esempi di codice che stavo trovando erano per la sintassi obsoleta di JSDOM. Grazie mille! :) – rinogo

+0

'jQuery' -> 'jquery' rende questo lavoro per me. – pizzaisdavid

1

Ho affrontato lo stesso problema e, mentre eseguivo il debug, sono venuto a conoscenza di qualcosa di nuovo.

Quando si esegue -

npm install jQuery 

Si installa la versione di jQuery 1.7.4 per il vostro progetto.

E quando lo fai -

npm install jquery 

Si installa la versione di jQuery 3.2.1 per il vostro progetto.

enter image description here

La differenza tra i due il comando è solo la maiuscola Q. Quindi, se ottieni questo errore, probabilmente stai usando la vecchia versione di jQuery.

Ulteriori informazioni sul primo comando (la versione precedente) here e sul secondo comando here.