2016-05-15 101 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的更多信息。