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

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

} else { 

     var live ="yes" 

} 

这是我的代码,但是当我运行它,我得到以下错误的jQuery的NodeJS需要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)

我该怎么办

这是一个BOT我的工作

+0

是否有理由为什么要使用jQuery来请求nodejs中的json数据? –

+0

除非您需要超过$ .getJSON的jquery,否则我会建议使用https://www.npmjs.com/package/request,它是Node本地HTTP模块的更简单的包装。 – tmslnz

回答

0

是的,它的确如此。 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

+0

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

+0

是node_modules目录中的jsdom,或者是可以用'require'加载的任何地方? – TinkerTank

+0

它在node_modules – SloppierKitty7

7

我遇到同样的问题,现在是确定后,我从require('jQuery')改变了包到require('jquery')。看起来后面的包(jquery)使用比前一个更新版本的jQuery(jQuery)。

+0

这并没有帮助。 –

+0

谢谢你,我做到了。 –

0

什么工作对我来说在这里,

我的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(); 
+0

仍然不适合我:'TypeError:$ .getJSON不是函数' – anunixercoder

10

的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()); 
+0

完美!我发现的所有代码示例都是针对过时的JSDOM语法。非常感谢! :) – rinogo

+0

'jQuery' - >'jquery'使这个工作适合我。 – pizzaisdavid

1

我面临同样的问题,并且在调试时我开始了解新的东西。

当你这样做 -

npm install jQuery 

它安装了jQuery 1.7.4版本到您的项目。

当你这样做 -

npm install jquery 

它安装了jQuery 3.2.1版本到您的项目。

enter image description here

两个命令间的差别仅仅是大写Q。所以,如果你得到这个错误,那么你可能使用旧版本的jQuery。

您可以阅读关于第一个命令(旧版本)here和关于第二个命令here的更多信息。