【问题标题】:Nodejs jQuery needs jsdomNodejs jQuery 需要 jsdom
【发布时间】:2016-09-11 09:40:27
【问题描述】:
$.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 不是函数 在创建时(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) 在需要(module.js:384:17) 在对象。 (E:\Sloppers bot\bot.js:2:9)

我该怎么办

这是给我正在工作的机器人

【问题讨论】:

  • nodejs中为什么要使用jquery请求json数据有什么原因吗?
  • 除非您需要 $.getJSON 以外的 jquery,否则我建议使用 npmjs.com/package/request,它是 Node 原生 HTTP 模块的更简单包装器。

标签: javascript json node.js twitch


【解决方案1】:

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

【讨论】:

  • 是 node_modules 目录中的 jsdom,还是其他可以用 'require' 加载的地方?
  • 它在 node_modules 中
  • 删除第 5 行。它仍然以错误的方式包含 jQuery。
  • 这有点难以调试。是否有可能您使用的是相当旧的 jQuery 版本,但仍然需要旧版本的 jsdom?
【解决方案2】:

我也遇到了同样的问题,将包从require('jQuery')改成require('jquery')后就OK了。似乎后面的包 (jquery) 使用的 jQuery 版本比前面的包 (jQuery) 更新。

【讨论】:

  • 这没有帮助。
【解决方案3】:

从这里对我没有任何帮助,

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

【讨论】:

  • 仍然不适合我:TypeError: $.getJSON is not a function
【解决方案4】:

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());

【讨论】:

  • 完美!我发现的所有代码示例都是针对过时的 JSDOM 语法的。非常感谢! :)
【解决方案5】:

我遇到了同样的问题,在调试时我了解到一些新的东西。

当你这样做时 -

npm install jQuery

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

当你这样做时 -

npm install jquery

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

这两个命令的区别只是大写Q。因此,如果您收到此错误,那么您可能使用的是旧版本的 jQuery。

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

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多