Nodejs jQuery需要jsdom

Slo*_*ty7 6 javascript json node.js twitch

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

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

} else {

      var live ="yes"

}
Run Code Online (Sandbox Code Playgroud)

这是我的代码,但当我运行它时,我得到以下错误

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

TypeError:require(...).jsdom(...).createWindow不是创建时的函数(E:\ Sloppers bot \node_modules\jQuery\lib \node-jquery.js:5:39)在E:\对象的Sloppers bot \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(模块. js:384:17)在Object.(E:\ Sloppers bot\bot.js:2:9)

我该怎么办

这是我正在工作的机器人

小智 13

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());
Run Code Online (Sandbox Code Playgroud)


rea*_*jin 7

我遇到了同样的问题,现在我把包改为之后require('jQuery')就可以了require('jquery').似乎后一个包(jquery)使用了比前一个更新版本的jQuery(jQuery).


Tin*_*ank 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);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 jsdom 文档: https://www.npmjs.com/package/jsdom