【问题标题】:Using jQuery in Node.js在 Node.js 中使用 jQuery
【发布时间】:2017-10-26 14:07:39
【问题描述】:

嗨,我是新来的,希望我能说清楚。我一直在尝试在 node.js 中调用(?)jQuery,但我所做的一切都失败了。我已经尝试解决这个问题好几个小时了,但仍然希望有人可以帮助我解决这个问题!

我正在尝试使用他们的 api 从 twitch 获取一些信息。在这种情况下,如果流媒体在线或离线。当我在本地打开页面(没有 node.js)时,jQuery 代码工作正常。但是,当我尝试使用 node.js 时,它会给出错误:$.

这是经过一些研究和随机尝试之后的结果..(对 node.js 和 jQuery 来说还是新手):

` http://imgur.com/a/2nhho

`

编辑:我尝试使用 node.js 的原因是在不刷新的情况下更新我的网站。所以如果有人上线/下线,他/她不应该被强迫刷新。

【问题讨论】:

  • 你安装的是什么版本的JSDOM?
  • 请在您的回答中嵌入图像。外部链接不好,因为一旦外部资源消失,问题的价值就会降低。
  • 由于我是新来的,所以对图片有限制。当我获得 10 声望时,我将在稍后更新问题。 jsdom 版本:“_from”:“jsdom@latest”,“_id”:“jsdom@11.0.0”,“_inCache”:true,“_location”:“/jsdom”,“_nodeVersion”:“7.5.0”,
  • @Smil3 您不需要图像 来传达信息。将相关文本复制并粘贴到问题中。

标签: javascript jquery node.js jsdom


【解决方案1】:

您可以使用基于jsdomnpm 模块。
它会给你一个窗口对象。 示例:

var express = require('express');
var Window = require('window');
global.window = new Window();
global.document = window.document;
var $ = require('jquery');
var app = express();
function game() {
   $("body").append(`<h1>Hello world!</h1>`);
}
game();
app.get('/', function (req, res) {
    res.send(document.getElementsByTagName('html')[0].innerHTML)
});

【讨论】:

    【解决方案2】:

    “当你唯一的工具是锤子时,每个问题看起来都像钉子。”

    在这种情况下,您尝试使用错误的工具来完成这项工作。 jQuery 是专门为在浏览器环境中使用而构建和优化的。虽然您可以通过拥有影子 DOM 来强制它工作……但不要这样做。

    如果您想使用 jQuery 的选择器和 DOM 操作功能,cheerio 基本上实现了该 API,但专门用于 Node.js/服务器端。

    但是,您听起来好像想使用它的 ajax() 方法(或者它的帮助器之一,例如 post()get()

    相反,您应该使用为 Node.js 构建的东西。 node-fetch (https://www.npmjs.com/package/node-fetch) 是专为 Node.js 设计的出色且易于使用的选项。

    这是其文档中的一个简单示例:

    fetch('https://github.com/')
    .then(function(res) {
        return res.text();
    }).then(function(body) {
        console.log(body);
    });
    

    您首先使用所需的 URL 调用 fetch()。它将返回带有 Response 对象的 Promise。从中,您可以提取 text() 或其他任何内容,然后您可以从那里解析它。

    如果您需要传递选项、调用不同的方法(如 POST)等,您只需给它一个选项对象作为第一次调用的第二个参数(查看他们的文档)。

    【讨论】:

    • 感谢您的回答!感觉我已经成功了一半。我尝试使用 node-fetch,但是我现在遇到的问题是关于发送“client-id”。因为我没有发送客户端 ID,所以它给了我 HTTP 400 错误。 dev.twitch.tv/docs/v5/guides/using-the-twitch-api:“请求可以同时包含客户端 ID 和 OAuth 令牌。没有任何一个的请求都会失败,并出现 HTTP 400 错误。”
    • 看,这个是如何使用fetch
    • @Smil3 好像有两种发送方式。最简单的方法是将其添加到您的 URL:twitch.url?client_id=your_id_here。另一种是将其作为标头发送(这就是-H 用于cURL 的内容),您可以通过将对象作为第二个参数传递给fetch(),标头为:fetch(url, { headers: { 'Client-ID': 'your_id_here' } })。如果您需要除此之外的帮助,请尝试自己解决,然后在您更新的工作中发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2011-07-19
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多