Nodejs jQuery нуждается в jsdom

$.getJSON('https://api.twitch.tv/kraken/channels/' + SLoppierKitty7, function(channel) {

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

} else {

      var live ="yes"

}

это мой код, но когда я его запускаю, я получаю следующую ошибку

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

TypeError: require (...). Jsdom (...). CreateWindow не является функцией в create (E: \ Sloppers bot \ node_modules \ jQuery \ lib \ node-jquery.js: 5: 39) в E: \ Ботинок Sloppers \ node_modules \ jQuery \ lib \ node-jquery.js: 9435: 18 в объекте. (E: \ Sloppers bot \ node_modules \ jQuery \ lib \ node-jquery.js: 9437: 2) в Module._compile (module.js: 434: 26) в Object.Module._extensions..js (module.js: 452: 10) в Module.load (module.js: 355: 32) в Function.Module._load (module.js: 310: 12) в Module.require (module.js: 365: 17) в require (module. js: 384: 17) в Object. (E: \ Sloppers bot \ bot.js: 2: 9)

что мне делать

это для бота, я работаю


person SloppierKitty7    schedule 15.05.2016    source источник
comment
Есть ли причина, по которой вы хотите использовать jquery для запроса данных json в nodejs?   -  person t.niese    schedule 15.05.2016
comment
Если вам не нужен jquery помимо $ .getJSON, я бы предложил использовать npmjs.com/package/request, который представляет собой более простую оболочку для собственного HTTP-модуля Node.   -  person tmslnz    schedule 01.11.2016


Ответы (5)


jquery 3.2.1, jsdom 10.1.0. Оно работает.

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());
person sutara79    schedule 06.05.2017
comment
Идеально! Все примеры кода, которые я нашел, относились к устаревшему синтаксису JSDOM. Огромное спасибо! :) - person rinogo; 25.12.2017

Я столкнулся с той же проблемой, и теперь все в порядке после того, как я изменил пакет с require('jQuery') на require('jquery'). Похоже, что более поздний пакет (jquery) использует более новую версию jQuery, чем предыдущая ( jQuery).

person realjin    schedule 01.11.2016
comment
это не помогает. - person Varun Goyal; 07.12.2016

Я столкнулся с той же проблемой, и во время отладки узнал кое-что новое.

Когда вы это сделаете -

npm install jQuery

Он устанавливает jQuery версии 1.7.4 в ваш проект.

И когда ты это сделаешь -

npm install jquery

Он устанавливает jQuery версии 3.2.1 в ваш проект.

введите здесь описание изображения

Разница между обеими командами только в верхнем регистре Q. Итак, если вы получаете эту ошибку, вы, вероятно, используете старую версию jQuery.

Вы можете узнать больше о первой команде (старой версии) здесь и о второй команде здесь.

person Rito    schedule 10.11.2017

Да. jQuery ожидает, что там будет «окно», которое обычно является объектом только для браузера. Таким образом, окно необходимо смоделировать. Это то, что делает jsdom.

После включения 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);

Дополнительную информацию см. В документации jsdom: https://www.npmjs.com/package/jsdom

person TinkerTank    schedule 15.05.2016
comment
находится ли jsdom в каталоге node_modules или где-нибудь еще, где его можно загрузить с помощью 'require'? - person TinkerTank; 15.05.2016
comment
это в node_modules - person SloppierKitty7; 15.05.2016
comment
удалить строку 5. Он по-прежнему неправильно включает jQuery. - person TinkerTank; 15.05.2016
comment
Это становится немного сложно отладить. Возможно ли, что вы используете довольно старую версию jQuery, которая все еще ожидает более старую версию jsdom? - person TinkerTank; 15.05.2016

у меня отсюда ничего не работало,

моя версия jquery: 3.2.1

jsdom версия: 10.1.0 наконец нашла решение:

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();
person Raza Ahmed    schedule 03.05.2017
comment
у меня все еще не работает: TypeError: $.getJSON is not a function - person zukijuki; 08.08.2017